使用LanguagePrimitives.xxxWithMeasure函数会影响运行时性能吗?

时间:2014-07-01 15:37:52

标签: performance f# annotations units-of-measurement

使用LanguagePrimitives.xxxWithMeasure函数会影响运行时性能吗?

是否有其他方法来注释外部函数(未在F#中实现)?

我在MSDN中看到过:“度量单位用于编译时单元检查,但在运行时环境中不会持久存在。因此,它们不会影响性能。”但是要确保它绝对涵盖所有场景,并且没有任何运行时占用空间。

2 个答案:

答案 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,看看应该没有运行时影响。