提高嵌套的foreach性能C#

我在Windows Store应用程序项目中拥有以下类。

    public class Meeting
{
    public string Id { get; set; }
    public string Organizer { get; set; }
    public string Organization { get; set; }
    public string Name { get; set; }
    public string MeetingType { get; set; }
    public string Description { get; set; }
    public Address Address { get; set; } //X = LAT; Y=LNG
    public DateTime StartDate { get; set; }
    public DateTime EndTime { get; set; }
    public string Status { get; set; }
    public List<MeetingPoint> MeetingPoints { get; set; }
    public List<MeetingInvitee> Invitees { get; set; }
}

和这个

public class MeetingPoint
{
    public string id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public int Position { get; set; }
    public List<Attchments> Attachments { get; set; }
    public List<MeetingPoint> SubPoints { get; set; }
    public int AttachmentNumber { get; set; }
    public string details { get; set; }
    public string executiveSummary { get; set; }
    public string presenter { get; set; }
    public string coPresenter { get; set; }
    public Double duration { get; set; }
    public string purpose { get; set; }
    public string supportedBy { get; set; }
    public int num { get; set; }

}

在其中一个页面中,我做了一个像这样的搜索,我试图在每个MeetingPoint每个SubPoint中获取Attachments

foreach (var item in meeting.MeetingPoints)
        {
            foreach (var sub in item.SubPoints)

            {

                foreach (var at in sub.Attachments)
                {

                    ...

                }
            }

我的问题是如果有一个更有效的方法,因为有3个嵌套的foreach需要大约4或5秒。


我不确定性能会提高,我想你可能会看到一些,但是如果你想避开嵌套循环,可以考虑使用lambda / SelectMany来达到你需要迭代的最低集合来对付。 换句话说,如果你只是要对附件进行操作,那就考虑一下这样的事情:

 var greatGandChildrenFlattened = parent.Children.SelectMany(c => c.GrandChildren.SelectMany(gc => gc.GreatGrandChildren));
 foreach (var item in greatGandChildrenFlattened)
 {
     //do work on item
 }

您可以尝试用Parallel.ForEach替换一些foreach块。 只需在输出窗口“EventSourceException:操作系统中没有可用的缓冲区(例如事件速率太快)”中查找它,如果发生这种情况,请将其中一个Parallel.ForEach调用替换为正常的foreach块。 如果事件过快发生,这可能会对性能产生负面影响,而不是帮助您。

链接地址: http://www.djcxy.com/p/87961.html

上一篇: Improve nested foreach performance C#

下一篇: profile file not dumped