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 传递结构通常会将类型的选择限制为数组和字段 - 请确保您愿意接受此类限制。