【问题标题】:Are there any downsides of in ref [closed]参考文献中是否有任何缺点[关闭]
【发布时间】:2018-09-05 22:07:42
【问题描述】:

我只是想知道使用 c# 7.2 中的 in 方法参数有什么缺点 我知道这被推荐用于处理 Structs,他们说它不会 increase performance that much 但据我所知,这不会对代码产生任何负面影响,并且可能会在进行递归时帮助您解决堆栈溢出异常。 有没有人知道为什么所有方法都不应该标记为in 的充分理由? I found 为什么人们建议避免使用 refout 但它们在这里不起作用。

【问题讨论】:

  • 使用in,您可以明确告知参数不会被更改。所以这取决于我想的情况
  • @EpicKip 那我想知道什么情况下没有更好的参数?我想不出来。
  • 什么时候可以更改?此外,何时更改根本无关紧要。或者很明显参数只是输入,例如Create() 方法通常不会更改参数,因此您不必显式指定
  • 例如,当引用大于对象本身时,复制成本更低。
  • @Tigran 这是有道理的。您知道可能发生这种情况的情况吗?

标签: c# c#-7.2


【解决方案1】:

由于这是一个与性能相关的问题,因此引入了 in 的讨论问题,因此很难找到一个正确的答案,而无需真正衡量具体代码示例的性能。

但是……

我们知道in 在 x86 操作系统上创建了一个引用 32bit,在 x64 操作系统上创建了 64bit

现在考虑像

这样的结构
struct Token
{
    char x; 
} 

在 x64 操作系统上,将这个结构复制到堆栈上,可能会比创建 64bit 对相同数据的引用执行得更快。

另外,不要忘记,in 意味着实例上的“恒定性”,它超越了性能推理,直接针对您的设计。因此,虽然从与性能相关的问题来看,一些推理可能是有争议的,但从设计的角度来看,in 具有针对特定设计用例的独特而清晰的语义。

【讨论】:

    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多