使用ExpressionVisitor有任何性能方面的考虑因素吗?

时间:2013-02-02 22:16:48

标签: c# linq

我目前正在阅读MSDN文章“演练:创建一个IQueryable LInQ Provider”,并且ExpressionVisitor有很多用处。 ExpressionVisitor使用访问者模式遍历表达式树。

http://msdn.microsoft.com/en-us/library/bb546158.aspx

在我看来,像这样反复遍历表达式树会对性能造成代价。真的吗?在创建IQueryProvider时我应该关注这个吗?

2 个答案:

答案 0 :(得分:1)

基本上,是的。表达式树可能变得非常大,因此遍历它们并且可能由于更改而可能创建副本可能需要一段时间。 LINQ to SQL和EF经常在客户端上使用比在SQL Server中更多的CPU,因为它们过度地操纵表达式AST。它非常严重,并且在探测器跟踪中出现很长时间。

如果它确实重要取决于你做这件事的频率以及你的提供者做了什么。不知道还有什么可说的。没有任何操作本身是缓慢或快速的。这取决于您的需求以及执行频率。

那就是说,表达访客是一个优雅的模式,并有自己的位置。

答案 1 :(得分:0)

不是真的。使用访问者模式解析抽象语法树是非常标准的。通常在创建IQueryable提供程序时,在表达式树中解析少数节点所花费的时间将与获取数据所花费的时间相比完全相形见绌。