小编Ily*_*lya的帖子

使用C#类型表示度量单位

我试图通过将double包装到struct中来获得我称之为测量单位系统的东西.我有C#结构,如Meter,Second,Degree等.我最初的想法是,在编译器内联所有内容后,我将获得与使用double时相同的性能.

我的显式和隐式运算符简单明了,编译器实际上内联它们,但是Meter和Second的代码比使用double的相同代码慢10倍.

我的问题是:为什么C#编译器不能使用Second作为使用double的代码的最佳代码,如果它无论如何都要内联?

第二个定义如下:

struct Second
{
    double _value; // no more fields.

    public static Second operator + (Second left, Second right) 
    { 
        return left._value + right._value; 
    }
    public static implicit Second operator (double value) 
    { 
        // This seems to be faster than having constructor :)
        return new Second { _value = value };
    }

    // plenty of similar operators
}
Run Code Online (Sandbox Code Playgroud)

更新:

我没有问结构是否适合这里.确实如此.

我没有询问代码是否会被内联.JIT确实内联它.

我检查了运行时发出的汇编操作.对于像这样的代码,它们是不同的:

var x = new double();
for (var i = 0; i < 1000000; i++)
{ …
Run Code Online (Sandbox Code Playgroud)

c# performance struct operator-keyword

11
推荐指数
1
解决办法
574
查看次数

标签 统计

c# ×1

operator-keyword ×1

performance ×1

struct ×1