C# 新列表之间是否存在差异<;T>;()和新列表<;T>;(0)
C# 新列表之间是否存在差异<;T>;()和新列表<;T>;(0),c#,.net,list,memory-management,C#,.net,List,Memory Management,新列表()和新列表(0)之间有区别吗 这可能是一个微观优化,但其目的是了解内存分配方面的差异(为了简洁起见,对某些部分进行了裁剪) static readonly T[]_emptyArray=new T[0]; 公开名单(){ _项目=_emptyArray; } 公共列表(国际容量){ if(容量
新列表()
和新列表(0)
之间有区别吗
这可能是一个微观优化,但其目的是了解内存分配方面的差异(为了简洁起见,对某些部分进行了裁剪)
static readonly T[]_emptyArray=new T[0];
公开名单(){
_项目=_emptyArray;
}
公共列表(国际容量){
if(容量<0)ThrowherPer.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity,ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
Contract.EndContractBlock();
如果(容量==0)
_项目=_emptyArray;
其他的
_项目=新T[容量];
}
如您所见,调用
List()
和List(0)
都只需将\u emptyArray
分配给\u项
。代码(在内存占用方面)是相同的。它是相同的-从内存分配来看,语句基本上是相同的standpoint@EricJ. 但是,直到您将第一项添加到列表中,列表才实际分配一个4元素数组;见斯科特·张伯伦的回答。
static readonly T[] _emptyArray = new T[0];
public List() {
_items = _emptyArray;
}
public List(int capacity) {
if (capacity < 0) ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.capacity, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum);
Contract.EndContractBlock();
if (capacity == 0)
_items = _emptyArray;
else
_items = new T[capacity];
}