解析表达式树的成本是否很高

本文关键字:是否 表达式 | 更新日期: 2023-09-27 17:57:00

我目前正在通读MSDN,演练:创建一个IQueryable LInQ提供程序,并且有很多ExpressionVisitor的使用。

这让我想知道,使用它是一项昂贵的操作吗?

它和反射一样贵吗?

解析表达式树的成本是否很高

不,遍历带有ExpressionVisitor的表达式树应该很便宜。

分析表达式树完全不需要运行时成本。编译器在编译时执行将表达式转换为对象树的所有工作。在内存中创建相关对象时,甚至没有太多运行时反射。当您看到如下方法调用时:

SomeMethod(Foo x => x.Property);

并且 SomeMethod 的参数Expression类型化,然后编译器将代码转换为 IL,其行为就像您编写了如下内容一样:

SomeMethod(new MemberExpression {
  Expression = new ParameterExpression("x", typeof(Foo)),
  Member = typeof(Foo).GetProperty("Property")
});

您可以查看生成的 IL 以获取完整详细信息,或查看 Microsoft 文档中的工作示例。涉及一些反射(例如MemberExpressions持有PropertyInfo参考),但这一切都非常快。

如果你有一个你担心的应用,你应该分析它(例如,最新版本的Visual Studio有一个内置的性能探查器),并查看哪些特定部分很慢。