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)
我似乎记得,它有时可以更快地获得价值作为对象,然后检查,如果这是为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)
我以前写过"为"与不是一样快,我期望可空类型,但是这可能会略有不同的情况下...再次,这是值得拥有的一去.
不过,我会非常惊讶,如果这是真正的瓶颈......想必正从摆在首位数据库中的数据将是昂贵得多.你有基准吗?