[英]How large per list item does List<uint> get in .NET 4.0?
我知道将一个uint
存储在内存中需要4个字节,但是在内存中需要多少空间来存储List<uint>
,例如x个uint
s?
这与uint[]
所需的空间相比如何?
List<T>
没有每项开销,因为它使用T[]
来存储其数据。 但是,包含N个项的List<T>
在其T[]
可能有2N个元素。 此外, List
数据结构本身可能有32个或更多字节的开销。
您可能会注意到T[]
和list<T>
之间没有那么大的区别,但您可以使用
System.GC.GetTotalMemory(true);
在对象分配之前和之后获取大致的内存使用量。
List<>
在内部使用数组,因此List<uint>
应该占用O(4bytes * n)空间,就像uint[]
。 与数组相比,可能会有更多的持续开销,但您通常不应该关心这一点。
根据具体实现(当使用Mono作为运行时而不是MS .NET运行时可能会有所不同),内部数组将大于列表中实际项的数量。 例如:5个元素的列表有一个可以存储10的内部数组,10000个元素的列表可能有一个大小为11000的内部数组。所以你通常不能说内部数组总是两倍大,或者大5%比列表元素的数量,它还可能取决于大小。
编辑:我刚看到,汉斯帕桑特描述了日益增长的行为List<T>
在这里 。
因此,如果您有一组要追加的项目,并且在创建列表时无法知道此集合的大小,请使用List<T>
。 它专为此案例而设计。 它为元素提供快速随机访问O(1),并且内存开销很小(内部数组)。 另一方面,在删除或插入列表中间时非常慢。 如果您经常需要这些操作,请使用LinkedList<T>
,然后使用更多的内存开销(每个项目!)。 如果你从一开始就知道你的集合的大小,并且你知道它不会改变(或只是很少次)使用数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.