Performance F#代码引用调用、性能和运行时需求

Performance F#代码引用调用、性能和运行时需求,performance,permissions,f#,quotations,Performance,Permissions,F#,Quotations,这里有4个与F#代码引用相关的问题- 如何调用F#代码引用 它的调用效率是否会比普通的老F#lambda低?到什么程度 它是否需要对高级反射或代码发射功能的运行时支持(这在我瞄准的嵌入式平台中通常是不存在或禁止的)?引用只是数据,因此您可以用任何巧妙的方式“调用”它们。例如,您可以简单地遍历树并在执行过程中解释每个节点,但如果您多次尝试使用该值,并且该值不是一个简单的值(例如,如果您引用了一个要重复调用的lambda),则该操作的性能不会特别好 如果您想要更高性能(也更简单),那么您可以使用Li

这里有4个与F#代码引用相关的问题-

如何调用F#代码引用

它的调用效率是否会比普通的老F#lambda低?到什么程度


它是否需要对高级反射或代码发射功能的运行时支持(这在我瞄准的嵌入式平台中通常是不存在或禁止的)?

引用只是数据,因此您可以用任何巧妙的方式“调用”它们。例如,您可以简单地遍历树并在执行过程中解释每个节点,但如果您多次尝试使用该值,并且该值不是一个简单的值(例如,如果您引用了一个要重复调用的lambda),则该操作的性能不会特别好

如果您想要更高性能(也更简单),那么您可以使用
Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotes
。这并不支持所有可能的引用(只是大致相当于C#LINQ表达式的集合),而且它还需要做更多的工作来实际生成IL等,但是如果重用结果,这应该会更有效。这是通过首先将引用转换为C#表达式树,然后使用此处定义的标准
Compile
函数来实现的,因此它只能在支持该功能的平台上工作。

您能定义“高级”反射并命名您要瞄准的嵌入式平台吗?