8

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

我多次调用此方法,并且有一种情况,我可以随时剃掉它是有益的。

谁能建议从 DataReader 中获取可为空的 Int32 的任何替代和更快的方法?

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

2 回答 2

11

似乎记得有时可以更快地将值作为对象获取,然后检查它是否为 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”的可空类型没有我预期的那么快,但这可能是一个稍微不同的情况......再次,值得一试。

但是,如果这真的是一个瓶颈,我会感到非常惊讶……首先从数据库中获取数据肯定会更加昂贵。你有这方面的基准吗?

于 2010-07-15T08:57:54.273 回答
2

?:与周围的 I/O 相比,您要优化的代码 (the ) 将是微不足道的。

所以,它不会变得更快。

于 2010-07-15T09:00:30.927 回答