gpt4 book ai didi

c# - DBNull.Value.Equals() 检查的性能如何?

转载 作者:行者123 更新时间:2023-11-30 21:15:40 25 4
gpt4 key购买 nike

我知道这可能还不够担心,但 DBNull.Value.Equals() 检查的性能如何?

public IEnumerable<dynamic> Query(string sql, params object[] args)
{
using (var conn = OpenConnection())
{
var rdr = CreateCommand(sql, conn, args).ExecuteReader(CommandBehavior.CloseConnection);
while (rdr.Read())
{
var e = new ExpandoObject();
var d = e as IDictionary<string, object>;
for (var i = 0; i < rdr.FieldCount; i++)
d.Add(rdr.GetName(i), DBNull.Value.Equals(rdr[i]) ? null : rdr[i]);
yield return e;
}
}
}

特别是这一行:

d.Add(rdr.GetName(i), DBNull.Value.Equals(rdr[i]) ? null : rdr[i]);

与原始代码(来自 Rob Conery 的 Massive 类(class)):

d.Add(rdr.GetName(i), rdr[i]);

肯定至少会产生很小的影响,同样可能不会真正引起注意,但我很好奇。进行转换的原因是因为在 ASP.NET MVC View 中测试 null 更容易。

最佳答案

如果您查看 .NET 反射器,您会发现 DBNull 对象没有任何字段。始终存在一个 DBNull 实例(静态值字段)。此外,在 DBNull 类中没有重写 Equals 方法。这意味着将调用 Object.Equals,它将执行检查引用相等性的外部方法调用。

结论:这个调用比较两个指针,性能影响在任何情况下都不会成为问题,就像比较两个整数值。

关于c# - DBNull.Value.Equals() 检查的性能如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5623129/

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