关于在C#中优化代码速度的几个问题

Nib*_*Pig 3 c# optimization

如果我有一个被多次调用的方法,例如:

public int CalledManyTimes(int a, int b)
{
     MyObject myObject = new myObject();
     int c = a + b + myObject.GetSomeValue();

     return c;
}
Run Code Online (Sandbox Code Playgroud)

通过放置MyObject myObject;方法之外是否有性能提升,所以它只声明一次,或者编译器会自动执行此操作吗?

结构究竟是如何传递的?

我传递一个Point结构的方法(点只包含INT的x,int y)对,这方法改变的值,并返回一个new Point(newX, newY);是更好地改变已传递到方法的点并返回?或者我可以创建一个Point point; 在我的第一个问题中提出的方法之外并使用它?

Mar*_*ell 9

myObject似乎没有任何有用的状态; 所以:做一个static方法 - 解决问题; 没有分配,没有虚拟通话:

public int CalledManyTimes(int a, int b)
{
     int c = a + b + MyObject.GetSomeValue(); // static method

     return c;
}
Run Code Online (Sandbox Code Playgroud)

其他任何事情:个人资料.

看看你的具体问题:

通过放置MyObject myObject可以提升性能; 在方法之外,所以它只声明一次,或者编译器会自动执行此操作吗?

将其初始化为零次甚至更快.但是,如果一些国家不是很明显的问题,那么是的,我希望它是更有效的重用单个实例-但是,改变语义(在原来的状态不是迭代之间共享).

结构究竟是如何传递的?

默认情况下,只要您瞥一眼方向,就会将它们复制到堆栈中.您可以使用ref以避免复制,如果结构大量超重,或者需要更新(理想情况下需要重新分配,而不是可变性),这可能很有用.

  • 小注意:删除`c`没有什么好处 - 编译器可以在优化的构建中完美地完成它; 但是使用`c`,它通常更容易调试. (3认同)