gpt4 book ai didi

c# - 为什么 .NET 结构应该小于 16 个字节?

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

现在我在一些地方读到结构的最大实例大小应该是 16 个字节。

但我看不到数字 (16) 从何而来。

在网上浏览时,我发现有些人认为这是获得良好性能的近似数字,但 Microsoft 说这是一个硬性上限。 (例如 MSDN)

对于为什么是 16 个字节,有没有人给出明确的答案?

最佳答案

这只是一个性能经验法则。

要点在于,因为值类型是按值传递的,所以如果将结构传递给函数,则必须复制整个结构的大小,而对于引用类型,只需复制引用(4 个字节) .一个结构可能会节省一些时间,因为你删除了一个间接层,所以即使它大于这 4 个字节,它仍然可能比传递引用更有效。但在某些时候,它变得如此之大,以至于复制的成本变得显而易见。一个常见的经验法则是,这通常发生在 16 个字节左右。选择 16 是因为它是一个很好的整数,是 2 的幂,并且备选方案是 8(太小,并且会使结构几乎无用)或 32(此时复制结构的成本已经成为问题如果您出于性能原因使用结构)

但归根结底,这是性能建议。它回答了“使用哪个最有效?结构还是类?”的问题。但它没有回答“哪个最能映射到我的问题域”的问题。

结构和类的行为不同。如果您需要一个结构的行为,那么我会说无论大小如何,都让它成为一个结构。至少在您遇到性能问题、分析您的代码并发现您的结构有问题之前。

您的链接甚至说这只是性能问题:

If one or more of these conditions are not met, create a reference type instead of a structure. Failure to adhere to this guideline can negatively impact performance.

关于c# - 为什么 .NET 结构应该小于 16 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082311/

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