C#在速度方面将结构引用和类引用传递给方法之间有区别吗?

时间:2018-01-27 00:10:13

标签: c# class struct pass-by-reference

here所示,结构通过引用传递副本和类。但是为什么使用ref关键字通过引用传递结构仍比传递类的引用慢?

通过将Singleton关键字替换为struct,我的计划速度有所不同。所有变量都已使用class关键字传递 通过更改关键字,我的测试速度提高了20%。 Shoudn的速度保持不变,因为我已经通过参考传递了吗?我不理解的是什么?

1 个答案:

答案 0 :(得分:3)

通过ref传递struct与通过值传递类(指向数据的指针)大致相同,通过ref传递类(指向数据的指针)应该比传递类慢一点值作为额外的取消引用。

是否通过将“按值传递结构”替换为“通过ref传递结构”来改进速度取决于结构的大小。如果你遵循Microsoft's guidance“struct< = 16 bytes”的大小,那么差异可能无关紧要,否则如果struct很大,你可能会看到一些性能提升。

潜在的收益/损失还取决于32位与64位(x86 / x64)CPU架构的选择 - 如果性能在您的情况下非常重要,请在目标机器上仔细测量。

注意:通过ref传递struct通常会将类型选择限制为数组和字段 - 确保您愿意忍受此类限制。