4
我是一名遊戲程序員,所以我總是試圖優化我的代碼。我最近在玩弄循環,我遇到了一些讓我困惑的事情。我創建了一個簡單的控制檯應用程序,創建了一個非靜態類:靜態字符串vs非靜態字符串
public class CL
{
static int X;
string Z;
static string sZ;
public CL(int x, int y, string z)
{
X = x + 1;
Z = z;
sZ = z;
}
public void Update(int i)
{
X *= i + 1;
X = X/2;
Z += i.ToString() ;
}
public void UpdateStatic(int i)
{
X *= i + 1;
X = X/2;
sZ += i.ToString();
}
}
有兩種方法都執行相同的操作:它們都修改靜態整數X
,然後他們添加到字符串的整i
即靜態(sZ
在UpdateStatic
)或不(Z
在Update
)。
我跑了一個循環,而這裏的結果:
正如你可以看到,修改靜態字符串變量了約260倍,只要修改非靜態的(它可以殺死一個遊戲的FPS) 。我試着把整數X都設爲靜態而不是,但是沒有性能差異。所以我的問題是:爲什麼修改靜態字符串會傷害性能?,但修改一個靜態整數不傷害?以下是其餘代碼:
static void Main(string[] args)
{
while (Console.ReadLine() != "Q")
{
int count = 20000;
List<CL> l = new List<CL>();
List<CL> sl = new List<CL>();
for (int i = 0; i < count; i++)
{
var cl = new CL(i, i * 2, "");
l.Add(cl);
sl.Add(cl);
}
Stopwatch s = new Stopwatch();
s.Start();
for (int i = 0; i < count; i++)
{
l[i].Update(i);
}
s.Stop();
Console.WriteLine(s.Elapsed + " unsorted list modifying non-static variable");
s.Reset();
s.Start();
for (int i = 0; i < count; i++)
{
sl[i].UpdateStatic(i);
}
s.Stop();
Console.WriteLine(s.Elapsed + " unsorted list modifying static variable");
s.Reset();
}
}
我找不到任何有關爲什麼會發生這種情況。對不起,如果答案很明顯。謝謝你的幫助。
@davidsbro:查看我編輯的關於int的信息。 – recursive