使用LanguagePrimitives.xxxWithMeasure函数会影响运行时性能吗?
是否有其他方法来注释外部函数(未在F#中实现)?
我在MSDN中看到过:“度量单位用于编译时单元检查,但在运行时环境中不会持久存在。因此,它们不会影响性能。”但是要确保它绝对涵盖所有场景,并且没有任何运行时占用空间。
答案 0 :(得分:3)
检查的最佳方法是使用ILSpy等反编译器查看已编译的代码。以下内容:
[<Measure>] type M
let test(x: int) =
let y = LanguagePrimitives.Int32WithMeasure<M> x
(x, y)
编译并传递给ILSpy,反编译为:
public static Tuple<int, int> test(int x)
{
return new Tuple<int, int>(x, x);
}
所以它没有任何运行时成本。
答案 1 :(得分:1)
为什么要关心?如果您有特定的性能目标,那么请对它们进行测试。编写代码以测试是否存在对您有意义的性能损失将是微不足道的。
话虽如此,您可以在F#标准库的源代码中找到where these functions are implemented,看看应该没有运行时影响。