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

时间:2012-03-11 00:09:24

标签: c# optimization

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

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

     return c;
}

MyObject myObject;置于方法之外是否会提升性能,因此只会声明一次,或者编译器会自动执行此操作吗?

结构是如何传递的?

我将Point结构传递给方法(Point只包含int x,int y),该方法正在改变值并返回new Point(newX, newY);更改传递的Point是否更好进入方法并返回?或者我可以创建Point point;在我的第一个问题中提出的方法之外并使用它?

1 个答案:

答案 0 :(得分:9)

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

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

     return c;
}

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

查看您的具体问题:

  

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

初始化零次甚至更快。但是,如果 某个状态在问题中并不明显,那么是的,我希望重用单个实例更有效 - 但是,这会改变语义(在原文中)迭代之间不共享状态。)

  

结构是如何传递的?

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