我目前正在阅读MSDN的文章“演练:创建IQueryable LInQ提供程序”,其中有很多ExpressionVisitor的用法。ExpressionVisitor使用访问者模式遍历表达式树。
http://msdn.microsoft.com/en-us/library/bb546158.aspx
在我看来,像这样一遍又一遍地遍历表达式树的性能代价很高。这是真的吗?在创建我的IQueryProvider时,我应该关注这个问题吗?
发布于 2013-02-03 06:29:45
基本上是这样的。表达式树可能会变得非常大,因此遍历它们并可能由于更改而创建副本可能需要一段时间。与SQL Server相比,LINQ to SQL和EF通常在客户端使用更多的CPU,因为它们过度操作表达式AST。它真的很严重,并且在分析器跟踪中显示了很长时间。
它是否重要取决于你做它的频率和你的提供者做的其他事情。不知道还能说什么。没有任何操作本身就是慢或快的。这取决于您需要什么以及执行它的频率。
也就是说,expression访问者是一种优雅的模式,有自己的位置。
发布于 2013-02-03 06:30:50
不怎么有意思。使用访问者模式解析抽象语法树是非常标准的。通常,在创建IQueryable提供程序时,解析表达式树中的几个节点所花费的时间与获取数据所花费的时间相比将完全相形见绌。
https://stackoverflow.com/questions/14667106
复制相似问题