DBNull.Value.Equals()检查的性能如何?
本文关键字:性能 检查 Value Equals DBNull | 更新日期: 2023-09-27 17:49:37
我知道这可能还不够担心,但是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类):
d.Add(rdr.GetName(i), rdr[i]);
肯定至少会有一个小的影响,可能也不是很明显,但我很好奇。转换的原因是因为在ASP中测试null要容易得多。. NET MVC视图
如果您查看。net反射器,您可以看到DBNull对象没有任何字段。总是有一个DBNull实例(静态Value字段)。此外,在DBNull类中不会重写Equals方法。这意味着对象。调用Equals,它将执行一个外部方法调用,检查引用是否相等。
结论:这个调用比较两个指针,在任何情况下性能影响都不是问题,它就像比较两个整数值。