C# 在速度方面传递结构引用和 class 对方法的引用之间有区别吗?
C# is there a difference between passing a struct reference and a class reference to a method in terms of speed?
正如所见here,结构通过复制传递,class通过引用传递。但是为什么使用 ref 关键字通过引用传递结构仍然比传递对 class 的引用慢?
通过将 struct
关键字替换为 class
,我的程序获得了不同的速度。所有变量都已通过 ref
关键字传递。
通过更改关键字,我的测试速度提高了 20%。速度不应该保持不变,因为我已经通过引用传递了吗?我有什么不明白的?
通过ref
传递结构与通过值(指向数据的指针)传递class大致相同,通过ref
(指向数据指针的指针)传递class ) 应该比按值传递 class 慢一点,因为需要额外的取消引用。
将 "pass struct by value" 替换为 "pass struct by ref" 是否会提高速度取决于结构的大小。如果你遵循 Microsoft's guidance "size of struct <= 16 bytes" 无论如何,差异可能是微不足道的,否则如果结构很大,你可能会看到一些性能提升。
潜力 gains/losses 还取决于 32 位与 64 位 (x86/x64) CPU 体系结构选择 - 如果性能对您的情况如此重要,请在目标机器上仔细测量。
注意:通过 ref 传递结构通常会将类型的选择限制为数组和字段 - 请确保您愿意接受此类限制。
正如所见here,结构通过复制传递,class通过引用传递。但是为什么使用 ref 关键字通过引用传递结构仍然比传递对 class 的引用慢?
通过将 struct
关键字替换为 class
,我的程序获得了不同的速度。所有变量都已通过 ref
关键字传递。
通过更改关键字,我的测试速度提高了 20%。速度不应该保持不变,因为我已经通过引用传递了吗?我有什么不明白的?
通过ref
传递结构与通过值(指向数据的指针)传递class大致相同,通过ref
(指向数据指针的指针)传递class ) 应该比按值传递 class 慢一点,因为需要额外的取消引用。
将 "pass struct by value" 替换为 "pass struct by ref" 是否会提高速度取决于结构的大小。如果你遵循 Microsoft's guidance "size of struct <= 16 bytes" 无论如何,差异可能是微不足道的,否则如果结构很大,你可能会看到一些性能提升。
潜力 gains/losses 还取决于 32 位与 64 位 (x86/x64) CPU 体系结构选择 - 如果性能对您的情况如此重要,请在目标机器上仔细测量。
注意:通过 ref 传递结构通常会将类型的选择限制为数组和字段 - 请确保您愿意接受此类限制。