最近、DataSet に格納されたデータを使用して、非常に処理量の多い作業を行う必要がありました。コードのボトルネックを特定するのに役立つツールを使用することになったほど重いものでした。ボトルネックを分析していたとき、DataSet ルックアップはそれほど遅くはありませんでしたが (ボトルネックではありませんでした)、予想よりも遅いことに気付きました。私は常に、DataSets がルックアップを O(1) にする何らかの HashTable スタイルの実装を使用していると想定していました (または、少なくともそれが HashTables であると私が考えるものです)。私のルックアップの速度は、これよりもかなり遅いように見えました。
.NET の DataSet クラスの実装について何か知っている人が、知っていることを共有してくれるかどうか疑問に思っていました。
私がこのようなことをすると:
DataTable dt = new DataTable();
if(dt.Columns.Contains("SomeColumn"))
{
object o = dt.Rows[0]["SomeColumn"];
}
メソッドのルックアップ時間と、Contains(...)
格納する値を取得する時間はどれくらいかかりますObject o
か? HashTableのように非常に高速だと思っていたでしょう(HashTableについて理解していることが正しいと仮定して)が、そうではないようです...
私はそのコードを記憶から書いたので、「構文的に正しくない」ものもあるかもしれません。