Mic*_*l G 5 c# linq refactoring profiling
我怎样才能使这个功能更有效率。目前运行时间为 6 - 45 秒。我已经在这个特定方法上运行了 dotTrace profiler,它的总时间在 6,000 毫秒到 45,000 毫秒之间。大部分时间花在“MoveNext”和“GetEnumerator”调用上。
时代的例子是
71.55% CreateTableFromReportDataColumns - 18, 533* ms - 190 calls
-- 55.71% MoveNext - 14,422ms - 10,775 calls
Run Code Online (Sandbox Code Playgroud)
我可以做些什么来加快这个方法的速度吗?它被多次调用,并且秒数加起来:
private static DataTable CreateTableFromReportDataColumns(Report report)
{
DataTable table = new DataTable();
HashSet<String> colsToAdd = new HashSet<String> { "DataStream" };
foreach (ReportData reportData in report.ReportDatas)
{
IEnumerable<string> cols = reportData.ReportDataColumns.Where(c => !String.IsNullOrEmpty(c.Name)).Select(x => x.Name).Distinct();
foreach (var s in cols)
{
if (!String.IsNullOrEmpty(s))
colsToAdd.Add(s);
}
}
foreach (string col in colsToAdd)
{
table.Columns.Add(col);
}
return table;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要此处的 sql 表定义,它们是:
报告数据
ReportID int
Run Code Online (Sandbox Code Playgroud)
报表数据栏
ReportDataColumnId int
ReportDataId int
Name varchar(255)
Value text
Run Code Online (Sandbox Code Playgroud)
我相信你应该能够将你的功能简化成这样
var columnsToAdd = report.ReportDatas
.SelectMany(r => r.ReportDataColumns)
.Select(rdc => rdc.Name)
.Distinct()
.Where(name => !string.IsNullOrEmpty(name));
Run Code Online (Sandbox Code Playgroud)
然后将名称添加到您的表中。
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |