使用多个匹配规则进行基于名称的查找可能比使用整数索引的查找要慢一些,这是有道理的。但是,当我们谈论数据集中平均 10-15 个 [column] 条目时,我很难相信这可以解释每行 3%(或在我的项目中为 5-7%)的相对成本. 在前面的陈述中值得澄清的是,我指的是发生这种“取消引用”的列数,而不是数据集中的记录数。上述这些成本是在这些查找每行发生一次的情况下进行的。所以它们可能会发生很多。
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 的等效版本快得多,我猜是出于同样的原因。
这个问题的精神来自: Ordinal-Based Lookups vs. Name Based Lookups