繁体   English   中英

列表中每个列表项的大小 <uint> 进入.NET 4.0?

[英]How large per list item does List<uint> get in .NET 4.0?

我知道将一个uint存储在内存中需要4个字节,但是在内存中需要多少空间来存储List<uint> ,例如xuint 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM