Имеет смысл, что поиск по имени может быть немного медленнее с несколькими правилами сопоставления, чем с целочисленным индексом. Однако мне трудно поверить, что это объясняет 3% (или 5-7% в моем проекте) относительную стоимость для каждой строки, когда мы говорим о среднем количестве 10-15 [столбцов] записей в наборе данных. . Стоит уточнить в предыдущем утверждении, что я имею в виду количество столбцов, с которыми происходит это «разыменование», а не количество записей в наборе данных. Эти затраты указаны в контексте того, что эти поиски выполняются один раз для каждой строки. Так что их может быть много.
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, я предполагаю, что это по тем же причинам.
Этот вопрос возникает в духе: Порядковый поиск по сравнению с поиском по имени а>