и слышал, что получение данных из SqlDataReader через порядковый номер быстрее, чем через имя столбца
Оба ваших примера получают данные через индекс (порядковый номер), а не имя столбца:
Получение данных через имя столбца:
while(reader.Read())
{
...
var value = reader["MyColumnName"];
...
}
потенциально медленнее, чем получение данных через индекс:
int myColumnIndex = reader.GetOrdinal("MyColumnName");
while(reader.Read())
{
...
var value = reader[myColumnIndex];
...
}
потому что первый пример должен неоднократно находить индекс, соответствующий "MyColumnName". Если у вас очень большое количество строк, разница может быть даже заметной.
В большинстве ситуаций разница не будет заметна, поэтому отдавайте предпочтение удобочитаемости.
ОБНОВЛЕНИЕ
Если вас действительно беспокоит производительность, альтернативой использованию порядковых номеров является использование DbEnumerator следующим образом:
foreach(IDataRecord record in new DbEnumerator(reader))
{
...
var value = record["MyColumnName"];
...
}
Класс DbEnumerator
считывает схему один раз и поддерживает внутреннюю хеш-таблицу, которая сопоставляет имена столбцов с порядковыми номерами, что может повысить производительность.
person
Joe
schedule
20.10.2011