gpt4 book ai didi

从 SqlDataReader 返回 Nullable 类型的 C# 性能提升

转载 作者:太空狗 更新时间:2023-10-29 20:08:51 26 4
gpt4 key购买 nike

我有一个简单的方法,它从 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”的文章,其中可空类型没有我预期的那么快,但这可能是一个稍微不同的情况……同样,值得一试。

但是,如果这真的是一个瓶颈,我会感到非常惊讶……当然,首先从数据库中获取数据的成本会高得多。你有这方面的基准吗?

关于从 SqlDataReader 返回 Nullable 类型的 C# 性能提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3253943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com