簡體   English   中英

C#性能增益從SqlDataReader返回Nullable Type

[英]C# Performance gain returning a Nullable Type from a SqlDataReader

我有一個簡單的方法,從DataReader而不是內置的GetInt32返回Nullable Int32。

我多次稱這種方法有一種情況,任何時候我都可以剃掉它會有益。

任何人都可以建議任何替代和更快的方式從DataReader中獲取可以為空的Int32嗎?

private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
    return !dataReader.IsDBNull(fieldIndex) ? 
                dataReader.GetInt32(fieldIndex) : (Int32?)null;
}

似乎記得有時可以更快地將值作為對象獲取,然后檢查是否為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”的可空類型並不像我期望的那么快,但這可能是一個稍微不同的情況......再次,它值得一試。

但是,如果這確實是一個瓶頸,我會感到非常驚訝......首先從數據庫獲取數據肯定會更加昂貴。 你有基准嗎?

與周圍的I / O相比,您要優化的代碼( ?: :)將無關緊要。

所以,它不會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM