IEnumerable型を反復処理しようとしたときに、forループのパフォーマンスに何が起こったのかについてはあまりわかりません。
以下は、深刻なパフォーマンスの問題を引き起こすコードです
foreach (IEdge ed in edcol)
{
IEnumerable<string> row =
from r in dtRow.AsEnumerable()
where (((r.Field<string>("F1") == ed.Vertex1.Name) &&
(r.Field<string>("F2") == ed.Vertex2.Name))
|| ((r.Field<string>("F1") == ed.Vertex2.Name) &&
(r.Field<string>("F2") == ed.Vertex1.Name)))
select r.Field<string>("EdgeId");
int co = row.Count();
//foreach (string s in row)
//{
//}
x++;
}
上部のforeach(IEdge ed in edcol)には、完了するまでに約11000回の反復があります。行を削除すると、数分の1秒で実行されます
int co = row.Count();
コードから。
row.Count()の最大値は、すべてのループで10です。
コメントを外すと
//foreach (string s in row)
//{
//}
コードの実行が完了するまで約10分かかります。
IEnumerableタイプには、このような深刻なパフォーマンスの問題がありますか?