我知道這可能不足以擔心,但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