我知道这可能不足以担心,但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]);
有必然是至少一个小的冲击,再次可能不是真正明显的,但我很好奇。转换的原因是因为在ASP.NET MVC视图中测试null更容易。
做1000个查询,时差 - 如果可以,我会感到惊讶 – BrokenGlass 2011-04-11 14:55:36
衡量它并让我们知道。 – asawyer 2011-04-11 14:55:47
建议这永远不会永远成为一个问题,如果确实如此,那将是因为一个可怕的,恶意编写的算法,每次调用都会在一个循环中调用DBNull.Value.Equals一百万次 – 2011-04-11 15:06:48