恐らく十分ではないことは分かっていますが、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;
}
}
}
、この行:(ロブConeryの巨大なクラスから)元のコード対
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
測定してお知らせください。 – asawyer
これはこれまで決して問題になることは決してありませんでしたが、そうした場合は、DBNull.Value.Equalsを呼び出しごとに100万回ループで呼び出すひどい悪意を持って作成されたアルゴリズムが原因です –