c# - 为什么 decimal.Parse() 比 (decimal)double.Parse() 慢?

标签 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 框架 v4.7)中产生以下指标; Performance metrics

double.Parse() 和 cast 的累计 CPU 使用率为 37.84%,而 decimal.Parse() 为 46.93%。那里的差异比可以轻易归结为数据类型大小的差异要多。谁能解释一下?

分析器上出现此问题的应用程序需要 10 天以上的时间才能运行,因此这个微小的差异相当于几个小时的运行时间。最好理解为什么。我可以看到 decimal.Parse() 调用了 oleaut32.dll 但是......有什么?

最佳答案

来自 double's implementation 的来源和 decimal's implementation看起来 decimal.Parse() 处理原位精度,而 double.Parse() 被优化为尽可能多地处理整数。

关于c# - 为什么 decimal.Parse() 比 (decimal)double.Parse() 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232967/

相关文章:

c++ - 我如何获取解析的输出并使用它来查找符号

parsing - Pratt 解析器与其他解析器类型相比如何,为什么它们使用得这么少?

c# - 显示/刷新按钮正常工作

c# - 是什么导致 C# 中过多的匿名方法闭包 (c__DisplayClass1)?

c# - 我如何在 MVC 中实现两个 Controller

c# - 字符串到日期时间无法转换 - C#

c# - 为什么我在 azure 应用程序服务中从表单发布时收到 404 错误,但它在 localhost 中运行良好

c# - 如何在 C# Windows 控制台应用程序中执行命令?

c# - 在桌面应用程序中制作捐赠按钮的正确方法,它将用户导航到 Paypal 网站

android - JSOUP 解析谷歌图片