查询性能
需要指出的是关于性能的主要设计要素是查询缓存。一旦执行了查询,它的一部分内容就被维持在全局缓存中。由于查询与元数据缓存的存在,使得第二次运行的执行速度总是比第一次运行快。例如,如下的Entity SQL查询:
第一次运行该查询耗时179毫秒,但下一次运行则只耗费了15毫秒的时间。首次运行与后续运行在执行方面的区别在于它构建了能够为执行传递provider的命令树(command tree)。
LINQ查询在执行方式上与Entity SQL查询相似。例如,下面的查询:
首次执行LINQ查询耗时202毫秒,而随后的执行耗时18毫秒,两者的差距还要低于Entity SQL.可以看到,使用编译了的LINQ查询对于性能的提高更为明显。编译LINQ查询的好处在于它构建了表达树(expression tree),当查询被编译时,后续的执行就不需要重建表达树了。编译的LINQ查询代码看起来像这样:
FuncIQueryable> compiledQuery = CompiledQuery.Compile((PerformanceArticleContext ne) =>
(from o ne.Orders select o));
(PerformanceArticleContext ne = PerformanceArticleContext())
{
(Orders o compiledQuery(ne))
{
i = o.OrderID;
}
} 
(PerformanceArticleContext ne = PerformanceArticleContext())
{
var orders = from order ne.Orders
select order;
(Orders o orders)
{
i = o.OrderID;
}
}
(PerformanceArticleContext ne = PerformanceArticleContext())
{
ObjectQuery orders = ne.CreateQuery();
(Orders o orders)
{
i = o.OrderID;
}
}


收藏
推荐
打印
