Vic*_*cky 13 .net c# memory arrays list
我假设它使用数组来实现List.如何List.Clear()实施?它实际上是清理数组还是只为这个列表创建一个新数组?
public class List {
private Array _array;
public void Clear1 () {
_array.length = 0;
}
public void Clear2 () {
_array = new Array();
}
}
Run Code Online (Sandbox Code Playgroud)
Str*_*ior 15
像这样(使用.NET Reflector):
public void Clear()
{
if (this._size > 0)
{
Array.Clear(this._items, 0, this._size);
this._size = 0;
}
this._version++;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它只是清除相同的数组.它可能假定如果您重复使用相同的列表,您可能希望使用大致相同数量的数据重新填充它.如果要释放阵列,则需要创建新的List实例.
从.NET 4.0开始,它执行以下操作:
Array.Clear呼叫将支持阵列归零.这有效地使其成为O(n)操作.InvalidOperationExceptions,如果MoveNext叫他们.