通过引用传递C#值类型以避免装箱

通过引用传递C#值类型以避免装箱,c#,performance,parameter-passing,C#,Performance,Parameter Passing,在C#中避免拳击的一个方法是。我读过一本书。尽管仅仅为了避免装箱而编写泛型方法似乎有点极端——如果类型总是相同的话 我的问题是——如果编写代码以获得最佳性能并避免装箱,那么通过引用传递所有值类型(如int)是否合理——即使所讨论的方法只处理对象而不创建对象?这有什么缺点吗?避免值类型装箱的最佳方法是:将它们用作值 我认为你完全误读了那篇文章。它说的是使用ref参数不会导致装箱。它并没有说这是一种避免拳击的方法 当在引用上下文中使用值类型时,例如转换为对象时,会发生装箱。本文指出,通过引用传递参数

在C#中避免拳击的一个方法是。我读过一本书。尽管仅仅为了避免装箱而编写泛型方法似乎有点极端——如果类型总是相同的话


我的问题是——如果编写代码以获得最佳性能并避免装箱,那么通过引用传递所有值类型(如int)是否合理——即使所讨论的方法只处理对象而不创建对象?这有什么缺点吗?

避免值类型装箱的最佳方法是:将它们用作值

我认为你完全误读了那篇文章。它说的是使用
ref
参数不会导致装箱。它并没有说这是一种避免拳击的方法

当在引用上下文中使用值类型时,例如转换为对象时,会发生装箱。本文指出,通过引用传递参数不能与引用类型的概念混淆,但混淆它们似乎正是您所做的

280Z28总结:

换句话说,避免以下两种操作:

  • 将值强制转换或赋值给
    object
    类型的变量(或将值作为
    object
    类型的方法参数的参数传递)
  • 将值强制转换或赋值给接口类型的变量(如
    IEnumerable
    ),或将值作为接口类型的方法参数的参数传递

  • 此规则也有例外(例如,调用某些泛型方法),也有在其他上下文中可能发生装箱的情况,但当您试图避免不必要的值类型装箱时,这些是需要注意的主要情况。

    如果类型始终相同,为什么要将方法声明为采用
    对象
    (这将导致装箱操作)?只需声明它采用您期望的值类型,就不会有装箱。如果“类型将始终相同”,装箱将从何而来?如果您的方法采用该特定类型,就不会有装箱…示例代码可能会澄清它。“通过引用传递所有值类型(如int)”---为什么您认为它应该提高性能?请检查此链接,并将一些代码示例放在您试图实现的目标上,然后我们可以给出一些建议。当您可以查看生成的代码时,假设任何事情都是毫无意义的。手边有idlasm.exe非常重要,您可以随时看到BOX指令。不,这种情况不会发生通过引用传递一个值是非常低效的。在你衡量出你需要帮助之前,永远不要帮助。然后你看。