在C#中将结构值传递给方法by-reference是可接受的优化吗?

Joe*_*Joe 3 .net c# optimization class-design

说我有一个结构:

struct MyStruct
{
    public int X
    public int Y
}
Run Code Online (Sandbox Code Playgroud)

并且在某些类中的方法在其他地方多次迭代:

public bool MyMethod( MyStruct myStruct )
{
    return ...
}
Run Code Online (Sandbox Code Playgroud)

是否将MyMethod签名更改为以下可接受的优化?

public bool MyMethod( ref MyStruct myStruct )
Run Code Online (Sandbox Code Playgroud)

如果是这样,它真的有多大的优势?如果没有,那么使用ref这种方式,结构需要多少字段以获得足够大的优势?

Mic*_*ael 7

在32位系统上,您将进行更改以推送8个字节的数据而不是4个字节.在64位系统上推送的数据量没有变化.您还要向编译器/ JITter添加一个要求结构必须存在于内存中的要求,因为您将获取它的地址,这可能会否定其他优化.

我怀疑这会显示你的程序性能有任何提升.首先介绍一下,看看MyMethod是否是您程序中的瓶颈.

然后,假设MyMethod中没有其他优化机会,请将更改传递给ref,然后再次进行配置以查看是否有任何改进.

  • @Rauhotz:因为很多事情取决于具体情况:被调用的东西是多少次,操作系统是什么,环境是什么.垃圾收集器在不同情况下的行为不同.有时候占用更多内存根本就不是问题,有时它会很糟糕,具体取决于程序运行的位置以及运行的其他内容.改善的努力始终与*你的时间*平衡. (6认同)
  • @Rauhotz:因为同一句话中的"理论"和"表现"实际上是一个非理性的 (5认同)