gpt4 book ai didi

c# - 提高生成列表的性能

转载 作者:行者123 更新时间:2023-11-30 19:14:54 26 4
gpt4 key购买 nike

我有一个包含 413 个对象的列表。现在,我正在根据要导出到 Excel 的这些对象创建一个新列表。

lstDailySummary = (List<DailySummary>)Session["Paging"];

List<ExportExcel> lstExportedExcel = lstDailySummary
.Select(x => new ExportExcel
{
PropertyOne = x.ACInfo.RegNumber,
PropertyTwo = db.MyTable.Find(x.NavProperty.subcategoryID).Text,
PropertyThree = x.NavProperty.text,
PropertyFour = (!string.IsNullOrWhiteSpace(x.Agcy.ToString())) ? x.codeAgcy.location : " ",
PropertyFive = x.EventLocation,
PropertySix = x.codeCounty.county,
PropSeven = x.Flight,
PropEight = x.FlightDay.ToString("MM/dd/yyyy HH:mm"),
PropNine = x.IncidentNumber,
PropTen = x.codeLocation.Location,
PropEleven = x.Summary,
PropTwelve = x.Total,
PropThirteen = x.ATime
})
.ToList();

在 Debug模式下,使用 VS 2017,我发现这需要 47 到 52 秒,因此,执行时间不到一分钟。

在这种情况下,是否有比 .Select 更快的方法可以使用?

最佳答案

代码的问题很可能出现在对您在此处进行的数据库的 413 次调用(原始列表中的每个项目一次)中:

PropertyTwo = db.MyTable.Find(x.NavProperty.subcategoryID).Text

不要这样做,而是一次加载所有值并从内存中使用它们:

var distinctSubcategoryIds = lstDailySummary
.Select(x => x.NavProperty.subcategoryID)
.Distinct();

var dataForPropertyTwo = db.MyTable
.Where(x => distinctSubcategoryIds.Contains(x.Id))
.ToDictionary(x => x.Id, x => x.Text);

List<ExportExcel> lstExportedExcel = lstDailySummary.Select(x => new ExportExcel
{
PropertyOne = x.ACInfo.RegNumber,
PropertyTwo = dataForPropertyTwo[x.NavProperty.subcategoryID],
PropertyThree = x.NavProperty.text,
PropertyFour = (!string.IsNullOrWhiteSpace(x.Agcy.ToString())) ? x.codeAgcy.location : " ",
PropertyFive = x.EventLocation,
PropertySix = x.codeCounty.county,
PropSeven = x.Flight,
PropEight = x.FlightDay.ToString("MM/dd/yyyy HH:mm"),
PropNine = x.IncidentNumber,
PropTen = x.codeLocation.Location,
PropEleven = x.Summary,
PropTwelve = x.Total,
PropThirteen = x.ATime
}).ToList();

关于c# - 提高生成列表的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51654263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com