我寫了這一塊的LINQ的處理做了交叉聯接一樣將多個列表之間的數據庫。爲什麼這個Cross在Linq加入這麼慢?
但由於某種原因,這是非常緩慢的,當任何名單中去比3000更我會等待30秒?這些列表可能會非常多。
該查詢循環與來自的其他列表數據的每個關係ColumnDataIndex。
什麼建議嗎?
UPDATE ** - 將數據插入正常列表中,這些列表是從配置的源手動構建的。這一切都在記憶中。
RunningResult[parameter.Uid] = (from source_row in RunningResult[parameter.Uid]
from target_row in ColumnDataIndex[dest_key]
where GetColumnFromUID(source_row, rel.SourceColumn) == GetColumnFromUID(target_row, rel.TargetColumn)
select new Row()
{
Columns = MergeColumns(source_row.Columns, target_row.Columns)
}).ToList();
的2個額外的功能:
MergeColumns:從2項注意到列和它們合併成一個單一的陣列。
public static Columnn[] MergeColumns(Column[] source_columns, Column[] target_columns)
{
Provider.Data.BucketColumn[] new_column = new Provider.Data.BucketColumn[source_columns.Length + target_columns.Length];
source_columns.CopyTo(new_column, 0);
target_columns.CopyTo(new_column, source_columns.Length);
return new_column;
}
GetColumnFromUID:返回匹配給定的列UID的項目中列的值。
private static String GetColumnFromUID(Row row, String column_uid)
{
if (row != null)
{
var dest_col = row.Columns.FirstOrDefault(col => col.ColumnUid == column_uid);
return dest_col == null ? "" + row.RowId : dest_col.Value.ToString().ToLower();
}
else return String.Empty;
}
更新:
截止了移動數據和查詢數據庫。這減少到幾毫秒的速度。可以寫一個優化的循環函數,但這對我來說是最快的出路。
你在哪裏定義你的數據源,內部或外部循環。如果在外面,他們是可查詢的來源或列表。 – 2013-03-12 13:58:21
我在循環之外構建它們見上面 – 2013-03-12 14:00:09
我的建議:**運行一個探查器**其他任何事情都是猜測。 – 2013-03-12 15:42:19