我试图通过将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)