現在、VS-Profiling ツールを使用して .net アプリケーションを最適化しようとしています。
非常に頻繁に呼び出される 1 つの関数には、次のコードが含まれています。
if (someObjectContext.someObjectSet.Where(i => i.PNT_ATT_ID == tmp_ATT_ID).OrderByDescending(i => i.Position).Select(i => i.Position).Count() == 0)
{
lastPosition = 0;
}
else
{
lastPosition = someObjectContext.someObjectSet.Where(i => i.PNT_ATT_ID == tmp_ATT_ID).OrderByDescending(i => i.Position).Select(i => i.Position).Cast<int>().First();
}
私はこのようなものに変更しました:
var relevantEntities = someObjectContext.someObjectSet.Where(i => i.PNT_ATT_ID == tmp_ATT_ID).OrderByDescending(i => i.Position).Select(i => i.Position);
if (relevantEntities.Count() == 0)
{
lastPosition = 0;
}
else
{
lastPosition = relevantEntities.Cast<int>().First();
}
クエリが 2 回実行されたことにコンパイラが気付き、結果をキャッシュするかどうかわからなかったので、変更によってメソッドが少し高速化されることを期待していました。
驚いたことに、メソッドの実行時間 (包括的サンプリングの数) は減少していませんが、9% も増加しています (プロファイラーによると)。
誰かがなぜこれが起こっているのか説明できますか?