Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DBNull.Value.Equals()检查的性能如何?_C#_Dbnull - Fatal编程技术网

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

C# DBNull.Value.Equals()检查的性能如何?,c#,dbnull,C#,Dbnull,我知道这可能还不够,但是DBNull.Value.Equals()检查的性能如何 与原始代码(来自Rob Conry的大型类)相比: 肯定会有至少一个小的影响,同样可能不会真正被注意到,但我很好奇。转换的原因是,在ASP.NET MVC视图中测试null要容易得多。如果查看.NET reflector,可以看到DBNull对象没有任何字段。DBNull(静态值字段)始终有一个实例。此外,在DBNull类中不重写Equals方法。这意味着调用Object.Equals,它将执行一个外部方法调用,以

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

与原始代码(来自Rob Conry的大型类)相比:


肯定会有至少一个小的影响,同样可能不会真正被注意到,但我很好奇。转换的原因是,在ASP.NET MVC视图中测试null要容易得多。

如果查看.NET reflector,可以看到DBNull对象没有任何字段。DBNull(静态值字段)始终有一个实例。此外,在DBNull类中不重写Equals方法。这意味着调用Object.Equals,它将执行一个外部方法调用,以检查引用相等性


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

执行1000次查询,计算差异时间-如果您能建议这永远不会成为问题,我会感到惊讶,如果是这样,这可能是因为一个可怕的、恶意编写的算法在循环中为每个调用调用DBNull.Value.Equals一百万次。我有这种感觉,但我想也许我在某个地方读到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]);
d.Add(rdr.GetName(i), rdr[i]);