我在Windows商店应用程序项目中有以下类。
app.controller('TruckDetailsController', function (transferService, $scope, dataShare, $stateParams)
{
//The below is api call. Ideally this number 13 (ID) should come from the details page.
ctrl.GetTruckDetails = transferService.getTruckDetails(13).then(function (d)
{
$scope.data = d;
angular.forEach($scope.data, function (value, index)
{
console.log(index);
});
});
}; }); }
和这一个
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; }
}
的每个Attachments
中获取SubPoint
MeetingPoint
我的问题是,是否有更有效的方法,因为有3个嵌套的foreach大约需要4或5秒。
答案 0 :(得分:0)
我不确定性能提升,我想你可能会看到一些,但如果你想摆脱嵌套循环,可以考虑使用lambda / SelectMany来获取你需要迭代的最低集合来进行工作。换句话说,如果你只是要对附件进行操作,那么请考虑这样的事情:
var greatGandChildrenFlattened = parent.Children.SelectMany(c => c.GrandChildren.SelectMany(gc => gc.GreatGrandChildren));
foreach (var item in greatGandChildrenFlattened)
{
//do work on item
}
答案 1 :(得分:0)
您可以尝试使用foreach
替换部分Parallel.ForEach
块。只需在输出窗口中查找“EventSourceException:操作系统中没有可用的免费缓冲区(例如事件速率太快)”,如果发生这种情况,请用正常Parallel.ForEach
替换其中一个foreach
次调用块。如果事件发生得太快而且可能会对性能产生负面影响而不是帮助您,则会发生这种情况。