PCがあれば何でもできる!スマートフォン用の表示で見るPCがあれば何でもできる!へっぽこアラサープログラマーが、覚えたての知識を得意げにお届けしますこの広告は、90日以上更新していないブログに表示しています。C#.NETですが、はまったので備忘録として残しておきます。今回会社で、あるプログラムの動作が遅いとの報告を受け、調査しました。そのプログラムはC#で書かれたものだったのですが、どうやらDataTableに数万件のデータを追加しているタイミングで、異様に時間がかかっている様子でした。約2万件で1〜2分です。処理も特に変なことをやっているわけではなく、単純にDataTable.NewRowでDataRowを生成し、各フィールドにデータを入れて、最後にDataTable.Rows.Addで追加しているだけ。́・ω・`)となってしまいました。結論としては、行追加の処理前にDataTable.Selectメソッドを使って絞り込みをかけているのが原因でした。処理に意味のない極端な例ですがこんなイメージです。//ここが異様に遅い}}どうやら、Selectメソッドを使用したタイミングで、変な気を利かせて勝手にDefaultViewにインデックスを生成している様子。以降、確かに同条件でSelectメソッドを使った時は速くなるのですが、行追加やデータ修正の度にインデックスの再生成が走り、遅くなっているという罠でした。うーん、これは余計なお世話^^;ちなみにDefaultViewにSortやFilterをかけても同様の現象が起こります。対応としては、DefaultViewとは別のDataViewを生成してそちらで絞り込みをかけるか、ループやLinqで対応するかだと思います。同条件で複数回絞り込むなら、インデックスが使える前者でしょうか。DataTableの速度に関しては、こちらのサイトが参考になります。かずきのBlog@hatenaただ、こちらではLinqが最速という解になっていますが、大量件数の場合はやはりインデックスを利用した方が速かったです。将範フリーランス/エンジニア(主にサーバサイド、その他広く浅く)自宅の作業場は冷蔵庫の隣。キッチンエンジニアとして日々精進しています。(1)はてなブログをはじめよう!m_doi2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。