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

Rob*_*Day 7 c# performance nullable sqldatareader

我有一个简单的方法,从DataReader而不是内置的GetInt32返回Nullable Int32.

我多次称这种方法有一种情况,任何时候我都可以剃掉它会有益.

任何人都可以建议任何替代和更快的方式从DataReader中获取可以为空的Int32吗?

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

Jon*_*eet 9

似乎记得,它有时可以更快地获得价值作为对象,然后检查,如果这是为DBNull.

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

这至少值得一试.请注意,这是假设你可以直接拆箱到int......我不知道自己是否这是正确的事,但它会很容易看到.

现在有另一种方法是不那么安全的 - 它会返回null,表示任何非整数值,即使字段实际上是一个字符串,例如:

private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
    return dataReader.GetValue(fieldIndex) as Int32?;
}
Run Code Online (Sandbox Code Playgroud)

我以前写过"为"与不是一样快,我期望可空类型,但是这可能会略有不同的情况下...再次,这是值得拥有的一去.

不过,我会非常惊讶,如果这是真正的瓶颈......想必正从摆在首位数据库中的数据将是昂贵得多.你有基准吗?