3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(.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