人気ブログランキング | 話題のタグを見る
(.Net)DataTableへのアクセスで列名で指定すると遅くなる
DataTableの特定の列にアクセするときの列の指定で、列名でアクセスすると、DataColumnやインデックスでアクセスするときに比べ2倍ほど遅くなるようです。
なので、列にアクセするときはなるべくインデックスかDataColumnを使いましょう。

同じように、ループ時に一旦新たに DataRow を作成し、そこに代入、そのDataRowから各列にアクセスとするか、foreach でのアクセスが望ましいようですね。
Rowsへのアクセスも全行舐めるような処理の時に DataTable.Rows[rowIndex][colIndex] とすると上の方法に比べ、4倍程度遅くなるようです。


.SelectメソッドにいたってはLinqやループで検索するときに比べ数十倍遅いようです。データ量が多い時は Select メソッドは使い物にならないかもしれません。

また、DataTableの書き込みに関しても BeginEdit,EndEditの無い場合、有る場合と比較して十数倍ほど遅くなります。BeginEdit,EndEditは使ったほうがよさそうです。

DataTableは便利だけど遅いので、結局クラス化してそれをListコレクションにしたほうがいいのかもしれません。

参考:
[.NET][C#]当然っちゃ当然だけどDataTableとか使いようによっては遅い
[.NET][C#]当然っちゃ当然だけどDataTableとか使いようによっては遅い その2
意外と遅い DataTable 、なので List を使うと 5 倍早くなる | Moonmile Solutions Blog
by Jehoshaphat | 2012-05-12 12:30 | .Net開発


<< Windows2000でレジス... メモリ増設したのに「ハードウェ... >>