关于内存的大小
List<long> ListOfLongs;
long[] ArrayOfLongs;
Run Code Online (Sandbox Code Playgroud)
如果每个都有N个元素,他们吃了多少内存?
我问这是因为据我所知,.NET没有模板(泛型)专业化.
Jon*_*Jon 10
实际上相同数量的内存(从技术上讲,List可能会消耗更多内存,因为它已经过度分配,因此它可以更容易地增长).
.NET中的通用集合不需要打包它们所拥有的项目,这将是一个巨大的内存和性能接收器.
该List<T>拥有的阵列T[].它对此数组使用指数增长策略,因此包含n元素的列表通常具有大小大于的大小的后备数组n.此外,较小的阵列需要进行垃圾收集,如果它们足够大以便在LoH上,则可能会很烦人.
但您可以通过手动指定容量来避免这种情况,例如作为构造函数参数.然后将分配具有所需容量的单个阵列,因此您可以避免上述两个问题.
另外List<T>,列表对象本身有一个小的O(1)开销.
但是使用泛型时没有每个元素的开销.运行时为您传入的每个值类型创建一个专用版本.不会发生元素装箱.
但是你不能使用C++样式模板专门化,你可以有效地重载某些类型参数的实现.所有通用实例都共享相同的C#代码.
即没有专门的IL代码,但每种值类型都基于相同的源代码获得专门的机器代码实现.
| 归档时间: |
|
| 查看次数: |
5411 次 |
| 最近记录: |