DataViewでRowFilterを設定する場合の注意点

DataViewはDataTableと似たようなクラスだが、
インスタンス生成時に既にインデックスを貼ってくれていたり、
まぁ色んな違いがある(投げやり)。

で、最近いじっていたあるコードがある。

DataViewにRowFilterを設定し、その後の処理結果によってまた同じ操作を繰り返すというものだ。
(実際のコード上は無限ループにならないようになっています。念のため)
これがやけに時間がかかる。
原因はRowFilterがRowFilterを何度も行ったことだった。

なぜなら理由は単純で、RowFilterが実行された場合、DataViewは内部的にインデックスを設定してしまっているのだ。
インデックスを設定するために毎回全データを取得しに行っているわけで、これでは大変時間がかかる。

で、幸い「// (dvを使った実行内容)」の内容をRowFilterでなく、FindRowsに置き換えることが可能だったので、それでひとまず解決した。
FindRowsメソッドはインデックスを再設定しないのだ。
(参考:http://msdn.microsoft.com/ja-jp/library/bb669089(v=vs.110).aspx

RowFilterで遅くなっている可能性を全く考えておらず、分かるのに時間がかかった。
ぱっと見、プロパティ設定してるだけに見えるからね、仕方ないね。

・・・修正したはいいけど、割と条件分岐が複雑なメソッドなので、テストに時間かかりそう。
(現に実装終わった後にバグを指摘されまくった)