大家好,最近我正在調試一個提高性能的程序。我注意到了一個關於賦值性能的興趣。下面的代碼是我的測試代碼。c#不同方式的分配表現
代碼
public class Word{....}
public class Chunk
{
private Word[] _items;
private int _size;
public Chunk()
{
_items = new Word[3];
}
public void Add(Word word)
{
_items[_size++] = word;
}
}
主
Chunk chunk = new Chunk();
for (int i = 0; i < 3; i++)
{
chunk.Add(new Word() { });//
}
代碼B
public class Chunk
{
private Word[] _items;
private int _size;
public Chunk()
{
_items = new Word[3];
}
public Word[] Words
{
get
{
return _items;
}
}
public int Size
{
get{return _size;}
set{_size=value;}
}
}
主
Chunk chunk = new Chunk();
for (int i = 0; i < 3; i++)
{
chunk.Words[i] = new Word() { };
chunk.Size + = 1;
}
在我用visual studio'profiling工具測試時,調用主要方法32000次,即性能顯示CODE B FASTER比CODE A.爲什麼CODE B比CODE A更快?誰能給我一個建議? 感謝
更新:對不起,我忘了在代碼B增加_size代碼,我已經更新了我的代碼B
更新:@Shiv庫瑪是,代碼A在30000呼叫的情況與代碼B相似倍。我測試了700K文件,代碼可以被稱爲29000次左右。 同時,代碼B比代碼A快100毫秒,而實際代碼B在實際段中更好。 這裏還有一件事,我想知道爲什麼Code B比Code A更快,即使是相同的任務?無論如何,謝謝你的回覆。
有多少差異?你能告訴我們你用來分析的代碼嗎?如果您要調用代碼A然後調用代碼B,請嘗試交換,以便調用代碼B,然後調用代碼A.向我們展示如何分析此代碼非常重要,因爲分析代碼中可能有許多錯誤。 – 2011-02-24 03:16:01
我justed測試了這一點,你說的1毫秒(有時和有利於任何一種方法)在30,000次迭代中幾乎沒有區別。除非你另有所見,否則這是對每個人時間的浪費。 – 2011-02-24 03:32:33
接受一個答案或留下評論或編輯你的問題,你在找什麼。 – 2011-03-18 00:15:30