如何讓此功能更高效。目前運行時間爲6至45秒。 我已經在這個特定的方法上運行了dotTrace分析器,它的總時間在6,000ms到45,000ms之間。大部分時間都花在「MoveNext」和「GetEnumerator」調用上。重構 - 速度提升
時代例,是
71.55% CreateTableFromReportDataColumns - 18, 533* ms - 190 calls
-- 55.71% MoveNext - 14,422ms - 10,775 calls
我可以做,以加速這一方法呢?它被調用了很多,和秒加起來:
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;
}
如果您在此處需要的SQL表定義它們是:
ReportData
ReportID int
ReportDataColumn
ReportDataColumnId int
ReportDataId int
Name varchar(255)
Value text
爲什麼該方法被調用190次?它是否被不必要地調用(你可以先調用它並緩存結果)?它可以並行處理190個不同的報告嗎? – Greg 2010-06-03 18:56:57
是的,這是190個不同的報告,我正在合併成一張桌子。 每個報告可以有不同的列名稱,但也有很多重疊的名稱。 – 2010-06-03 18:59:03
只是要清楚,這是Linq2Sql什麼的?你使用的是什麼版本的.NET? – 2010-06-03 19:30:56