代码A
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比CODE更快。为什么CODE B比CODE A更快?谁可以给我一个建议? 感谢
更新:对不起,我忘了增加代码B中的_size代码,我更新了我的代码B
更新:@Shiv Kuma是的,在30000个通话时间的情况下,代码A与代码B类似。我测试了700K文件,代码可以调用29000次左右。 同时,代码B比代码A快100毫秒,实际上代码B在实际段中要好得多。 还有一件事我想知道为什么Code B比Code A更快,即使是同一个任务? 无论如何,谢谢你的回复。
答案 0 :(得分:1)
在CODE A中,你递增两次。进入你的for循环:
for (int i = 0; i < 3; i++)
一旦进入你的方法:
_items[_size++] = word;
在CODE B中,你只在for循环中递增一次。
它并不多,但肯定会导致性能差异。
是的,方法调用也会增加少量开销。
答案 1 :(得分:1)
我能想到的三个原因。