C# 关于双/浮动和传递参数的性能优化

C# 关于双/浮动和传递参数的性能优化,c#,C#,在我的项目中,我用浮动替换了所有的双精度,这导致了性能的提高 现在,我所有的函数都将参数作为引用。如果我将它们作为参考传递,我将保存一份副本。如您所知,如果参数未作为引用传递,则会复制到函数中 我想知道这是否值得为200个函数这样做,我是否应该期待改进 谢谢一般不需要 黄金法则: 过早优化是罪恶的根源 首先找到瓶颈,即程序中最慢的部分,然后对其进行优化。 然后你发现一个新的瓶颈并重复 首先,从优化算法开始,然后是数据结构、数据、代码,最后是技术 黄金法则: 过早优化是罪恶的根源 首先找到瓶颈,即

在我的项目中,我用浮动替换了所有的双精度,这导致了性能的提高

现在,我所有的函数都将参数作为引用。如果我将它们作为参考传递,我将保存一份副本。如您所知,如果参数未作为引用传递,则会复制到函数中

我想知道这是否值得为200个函数这样做,我是否应该期待改进

谢谢

一般不需要

黄金法则:

过早优化是罪恶的根源

首先找到瓶颈,即程序中最慢的部分,然后对其进行优化。 然后你发现一个新的瓶颈并重复

首先,从优化算法开始,然后是数据结构、数据、代码,最后是技术

黄金法则:

过早优化是罪恶的根源

首先找到瓶颈,即程序中最慢的部分,然后对其进行优化。 然后你发现一个新的瓶颈并重复


首先,从优化算法开始,然后是数据结构、数据、代码,最后是技术。

除非这些方法在一秒钟内被调用数千次,否则我不会改变行为

您知道,通过引用传递内容确实会搞乱类背后的逻辑。有些东西是不能修改或改变的,除非你想改变它们。(使用访问器方法更改实例变量)

否则,这将是一个调用,并且完全不值得花时间修改200个方法,仅仅为了小的性能提高


在方法中创建的ObjectsValue类型位于堆栈上,这意味着一旦不再需要它们,它们就会被清除。

除非这些方法在一秒钟内被调用数千次,否则我不会更改其行为

您知道,通过引用传递内容确实会搞乱类背后的逻辑。有些东西是不能修改或改变的,除非你想改变它们。(使用访问器方法更改实例变量)

否则,这将是一个调用,并且完全不值得花时间修改200个方法,仅仅为了小的性能提高


在方法中创建的对象值类型位于堆栈上,这意味着一旦不再需要它们,它们就会被清除。

否,通过引用传递
浮点值将不会获得任何性能好处

在32位系统上,
浮点
与指向它的指针大小相同。在64位系统上,指针是
浮点值的两倍


此外,即使指针小于值类型,通过引用传递也意味着方法还需要通过引用访问值,这超过了较小参数类型的性能增益。

否,通过引用传递
浮点值
不会获得任何性能好处

在32位系统上,
浮点
与指向它的指针大小相同。在64位系统上,指针是
浮点值的两倍


此外,即使指针小于值类型,通过引用传递也意味着方法还需要通过引用访问值,这超过了较小参数类型的性能增益。

通过将
double
替换为
floats
,您的项目可能不太准确。这可以接受吗?你必须时刻考虑你的改变以及它们将产生的影响。做这些事情并不总是值得的。没有任何更详细的细节(比如源代码,这些调用的频率等等),这真的很难说。。。因此,请提供一些详细信息,如源代码以及与性能方面相关的使用模式……不。任何改进都可以忽略不计,除非你知道自己需要它,否则你不应该进行微优化。您知道,在从double转换为float的过程中,您也可能改变了程序的行为,并且可能使结果无效。浮点数的精度比双倍点数低很多,如果你在程序中需要这个精度,你可能已经破坏了它。浮点数很好,我不需要那么高的精度。我已经全部测试过了,效果很好。关于频率,很多函数被调用,比如每帧80艘船。我想这是很多。用
浮动替换
双倍
,可能会降低项目的准确性。这可以接受吗?你必须时刻考虑你的改变以及它们将产生的影响。做这些事情并不总是值得的。没有任何更详细的细节(比如源代码,这些调用的频率等等),这真的很难说。。。因此,请提供一些详细信息,如源代码以及与性能方面相关的使用模式……不。任何改进都可以忽略不计,除非你知道自己需要它,否则你不应该进行微优化。您知道,在从double转换为float的过程中,您也可能改变了程序的行为,并且可能使结果无效。浮点数的精度比双倍点数低很多,如果你在程序中需要这个精度,你可能已经破坏了它。浮点数很好,我不需要那么高的精度。我已经全部测试过了,效果很好。关于频率,很多函数被调用,比如每帧80艘船。我想这是很多。是的,每一帧都被称为很多。从听起来似乎有很多计算在进行。如果你和推荐人一起工作,这可能是有益的。但正如Guffa指出的,这取决于你的架构,它可能弊大于利。但在更改所有函数之前,我建议您注意任何其他类型的性能瓶颈,例如,当您只需要