gpt4 book ai didi

C# 十进制数据类型性能

转载 作者:IT王子 更新时间:2023-10-29 03:47:57 25 4
gpt4 key购买 nike

我正在用 C# 编写一个财务应用程序,其中性能(即速度)至关重要。因为它是一个金融应用程序,所以我必须大量使用 Decimal 数据类型。

我已经在探查器的帮助下尽可能地优化了代码。在使用 Decimal 之前,一切都是用 Double 数据类型完成的,速度快了好几倍。但是,由于 Double 的二进制性质,Double 不是一个选项,它会在多个操作过程中导致大量精度错误。

是否有任何我可以与 C# 交互的十进制库,可以使我的性能比 .NET 中的 native Decimal 数据类型有所改进?

根据我已经得到的答案,我发现我不够清楚,所以这里有一些额外的细节:

  • 应用程序必须尽可能快(即,使用 Double 而不是 Decimal 时的速度是一个梦想)。 Double 比 Decimal 快大约 15 倍,因为操作是基于硬件的。
  • 硬件已经是一流的(我在双 Xenon 四核处理器上运行)并且应用程序使用线程,因此机器上的 CPU 利用率始终为 100%。此外,该应用程序在 64 位模式下运行,这使其比 32 位模式具有明显的性能优势。
  • 我已经优化到理智的程度(超过一个半月的优化;不管你信不信,现在它只需要我最初用作引用的相同计算的大约 1/5000 );这种优化涉及所有方面:字符串处理、I/O、数据库访问和索引、内存、循环、改变某些东西的制作方式,甚至在任何地方都使用“switch”而不是“if”,这会有所不同。探查器现在清楚地表明,其余的性能罪魁祸首在于 Decimal 数据类型运算符。没有其他事情会占用大量时间。
  • 在这里您必须相信我:在 C#.NET 领域,我已经竭尽全力优化应用程序,我对它目前的性能感到非常惊讶。我现在正在寻找一个好主意,以便将 Decimal 性能提高到接近 Double 的水平。我知道这只是一个梦,但只是想检查一下我是否想到了所有可能的事情。 :)

谢谢!

最佳答案

您可以使用长数据类型。当然,您不能在其中存储分数,但如果您将应用程序编码为存储便士而不是英镑,就没问题了。 long 数据类型的准确度为 100%,除非您处理大量数据(使用 64 位 long 类型)否则没问题。

如果您不能强制存储便士,则将一个整数包装在一个类中并使用它。

关于C# 十进制数据类型性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/366852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com