名前ベースのルックアップは、整数インデックスの場合よりも複数の一致ルールを使用すると少し遅くなる可能性があることは理にかなっています。ただし、データ セット内の平均 10 ~ 15 [列] エントリ数について話しているときに、これが各行の 3% (または私のプロジェクトでは 5 ~ 7%) の相対コストを説明しているとは信じがたいです。 . データセット内のレコード数ではなく、この「逆参照」が発生する列の数を参照している前のステートメントで明確にする価値があります。上記のコストは、これらのルックアップが行ごとに 1 回発生するというコンテキストにあります。したがって、それらは頻繁に発生する可能性があります。
idr.GetOrdinal(name) // Name based lookup
idr[name] // Name-based lookup
idr.GetValue(index) // Ordinal-based lookup
名前ベースのフィールド検索を行うために必要な、データベースとの追加の通信は実際にありますか? 何が彼らをそんなに遅くするのですか?
また、次のコードで列名を取得していることにも気付きました。
List<string> columnList = new List<string>();
for (int i = 0; i < idr.FieldCount; i++)
{
columnList.Add(idr.GetName(i));
}
return columnList;
GetSchemaTable を使用した同等のバージョンよりもはるかに高速です。同じ理由によるものだと思います。
この質問は、序数ベースのルックアップと名前ベースのルックアップの精神から生じます。