为什么decimal.Parse()慢于(decimal)double.Parse()?

时间:2018-01-12 19:36:19

标签: c# .net parsing

为什么使用double.Parse()解析并转换为decimal而不是调用decimal.Parse()会更快?

鉴于以下内容;

string stringNumber = "18.34";

double dResult = 0d;
decimal mResult = 0m;
for (int i = 0; i < 9999999; i++)
{
    mResult = (decimal)double.Parse(stringNumber);
    mResult = decimal.Parse(stringNumber);
}

在VS2017探查器(.NET framework v4.7)中得出以下指标; Performance metrics

累计double.Parse()和强制转换占CPU使用率的37.84%,而decimal.Parse()占用了46.93%的CPU。这里有更多不同之处,可以很容易地归结为数据类型大小的差异。谁能解释一下?

在探查器上出现的应用程序需要10天以上才能运行,因此这个小差异相当于运行时间。了解原因很好。我可以看到decimal.Parse()oleaut32.dll发出呼叫但是......是吗?

1 个答案:

答案 0 :(得分:5)

来自double's implementationdecimal's implementation的来源似乎decimal.Parse()处理原位精确度,而double.Parse()已经过优化,可以执行相同的工作整数尽可能。