Увеличение производительности C#, возвращая Тип Nullable из SqlDataReader

У меня есть простой метод, который возвращает Nullable Int32 из DataReader, а не созданного в GetInt32.

Я называю этот метод многими много раз и имею одну ситуацию, где любое время, которое я могу сбрить его, было бы выгодно.

Кто-либо может предложить какие-либо альтернативные и более быстрые способы вытащить nullable Int32 из DataReader?

private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
    return !dataReader.IsDBNull(fieldIndex) ? 
                dataReader.GetInt32(fieldIndex) : (Int32?)null;
}
7
задан djdd87 15 July 2010 в 08:59
поделиться

2 ответа

Мне кажется , что иногда можно быстрее получить значение как объект, а затем проверить, является ли это DBNull.

private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
    object value = dataReader.GetValue(fieldIndex);
    return value is DBNull ? (Int32?) null : (Int32) value;
}

По крайней мере, стоит попробовать. Обратите внимание, что это предполагает, что вы можете распаковать прямо в int ... Я не знаю наверняка, правильно ли это, но это будет легко увидеть.

Теперь есть другой подход, который несколько менее безопасен - он вернет null для любого нецелого значения, даже если поле на самом деле является строкой, например:

private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
    return dataReader.GetValue(fieldIndex) as Int32?;
}

Я ранее писал об «as» с допускающим значение null типы не так быстры, как я ожидал, но это может быть немного другой случай ... опять же, стоит попробовать.

Однако я был бы очень удивлен, если это действительно узкое место ... конечно, получение данных из базы данных в первую очередь будет намного дороже. У вас есть тесты для этого?

9
ответ дан 6 December 2019 в 22:59
поделиться

Код, который вы хотите оптимизировать (?: ), будет незначительным по сравнению с окружающим вводом-выводом.

Так что быстрее не будет.

2
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: