Bry*_*dds 3 permissions performance f# quotations
以下是关于 F# 代码引用的 4 个深度相关的问题 -
如何调用 F# 代码引用?
它的调用方式是否会比它只是一个普通的旧 F# lambda 效率低?到什么程度?
它是否需要对高级反射或代码发射功能的运行时支持(我所针对的嵌入式平台通常不存在或禁止这些功能)?
引用只是数据,因此您可以以任何聪明的方式“调用”它们。例如,您可以简单地遍历树并在执行过程中解释每个节点,但是如果您尝试多次使用该值并且它不是一个简单的值(例如,如果您引用了一个 lambda您要重复调用)。
如果你想要更高性能(也更简单)的东西,那么你可以使用Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation. 这不支持所有可能的引用(大致相当于 C# LINQ 表达式的集合),它必须做更多的工作才能实际生成 IL 等,但是如果您重用结果,这应该更有效. 这首先将引用转换为 C# 表达式树,然后使用在Compile那里定义的标准函数来完成它的工作,因此它只能在支持它的平台上工作。