我目前正在尝试借助 VS-Profiling 工具优化 .net 应用程序。
一个经常被调用的函数包含以下代码:
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();
}
我希望该更改会加快该方法的速度,因为我不确定编译器是否会注意到查询已完成两次并缓存结果。
令我惊讶的是,该方法的执行时间(包含采样的数量)并没有减少,甚至增加了 9%(根据分析器)
有人可以解释为什么会这样吗?