2013-02-02 31 views
0

我正在阅读MSDN文章“演练:创建一个IQueryable LInQ提供程序”,并且有很多ExpressionVisitor的用法。 ExpressionVisitor使用Visitor模式遍历表达式树。使用ExpressionVisitor是否有任何性能方面的考虑?

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

这似乎给我,一遍又一遍遍历表达式树像这将是代价高昂的性能。真的吗?在创建我的IQueryProvider时,我应该关心这一点吗?

+2

只是传闻......当我们对LINQ-to-SQL进行概要分析时,我们发现代码中的AST部分没有问题:大部分的nonADO.NET所用时间实际上都是物化器。这就是我们写短篇小说的原因。 –

回答

1

基本上,是的。表达式树可能变得非常大,因此遍历它们并可能创建副本由于更改可能需要一段时间。 LINQ to SQL和EF经常在客户端上使用比在SQL Server中更多的CPU,因为它们过度操纵表达式AST。这是非常严重的,并在大量时间的轮廓痕迹中显示。

如果确实很重要,取决于你多久做一次以及你的提供者做了什么。不知道还有什么要说的。没有操作本身就很慢或很快。这取决于你需要什么以及你多久执行一次。

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

0

不是真的。用访问者模式解析抽象语法树是非常标准的。通常,在创建IQueryable提供程序时,花费在解析表达式树中的少数几个节点上的时间将会完全超出您花费在读取数据上的时间。

相关问题