.Net 2.0-通用列表的效率如何?
我正在创建一个在内存中保存大量用户数据的应用程序,它主要将所有数据保存在列表结构中(当我需要查找时,还会保存一些字典) 我想知道 列表的效率如何? 每一个都有多少内存开销?(也就是说,除了它们包含的对象将占用的内存空间) 每次我申请一个新的,我要付多少罚金 有没有更有效的方法 字典只是哈希表,对吗?或者它们是一种效率较低的数据结构 我想使用数组,但我有一个典型的问题,就是一直在添加和删除数组中的内容,因此必须增加/缩小数组将是一件痛苦的事情 有什么想法/建议吗.Net 2.0-通用列表的效率如何?,.net,performance,generics,list,memory,.net,Performance,Generics,List,Memory,我正在创建一个在内存中保存大量用户数据的应用程序,它主要将所有数据保存在列表结构中(当我需要查找时,还会保存一些字典) 我想知道 列表的效率如何? 每一个都有多少内存开销?(也就是说,除了它们包含的对象将占用的内存空间) 每次我申请一个新的,我要付多少罚金 有没有更有效的方法 字典只是哈希表,对吗?或者它们是一种效率较低的数据结构 我想使用数组,但我有一个典型的问题,就是一直在添加和删除数组中的内容,因此必须增加/缩小数组将是一件痛苦的事情 有什么想法/建议吗 编辑:我知道我的基本数据结构10
编辑:我知道我的基本数据结构101,以及为什么链表更适合添加/删除,而哈希表更适合随机访问 我最关心的是.Net的白痴统治。例如,每个结构浪费了多少内存。以及在初始化/杀死它们上浪费的时间 例如,如果实例化/GC一个列表需要很多时间,但清除它的时间不多,也许我应该保留一个列表池等待我,清除它们并在完成后将它们发送回池中,而不是简单地取消引用它们 或者,如果哈希表的访问速度更快,但浪费了大量内存,我可能更喜欢使用列表并遍历它们,以进行小项目计数 我还想关注内存使用情况,因为我的应用程序非常占用内存(想想memcached吧)。。。
有人知道我在哪里可以找到这样的信息吗?列表下面是数组,因此添加项目的性能影响将非常昂贵,除非在最后添加
否则,它们基本上和数组一样快。列表在内部使用数组,而字典使用哈希表
它们比较旧的非泛型类ArrayList和HashTable更快,因为您不需要将所有内容转换为对象(装箱、取消装箱和类型检查)而且因为MS优化了它们,那么旧的类。< P>也许你应该考虑使用内存数据库中的一些类型,如果你有很多数据必须保存在内存中, 如果你需要在列表中随机插入或删除列表中的效率,那么就有一个链接表数据结构——给出细节。显然,作为链表随机访问是没有效率的。由于链表的性质,LinkedList对象的添加和删除时间会减少。添加元素时,它不必像普通列表那样调整数组的大小。除此之外,我怀疑LinkedList的性能与普通列表大致相同
请参见Wikipedia:如果您关心内存使用,真正的关键是将阵列存储在磁盘上,并将当时需要的部分映射到内存中
关键是要使用文件标志缓冲,并且总是准确地读/写一个扇区的数据。Net列表不使用链接列表。这是一个数组,默认情况下它以4个位置开始,我认为当你添加东西时,它的大小会加倍。因此,性能可能会有所不同,这取决于您如何使用它
如果您使用VS2008,请在深入这个老鼠洞之前运行探查器。当我们开始真正研究我们在哪里浪费了时间时,我们很快就发现讨论链表的更好的方面其实并不重要 我认为这两个过程可能有些过分;另外,进程间的通信可能会有一些缓慢(尽管我从未尝试过这样的事情,所以把我的观点看作是一派胡言)。我在一个数据驱动的应用程序中工作,其中每个数据单元都很小,但在任何给定的时间,我们可能拥有超过10亿个数据单元。我们使用的方法基本上是:
- 无论发生什么情况,所有内容都驻留在磁盘上
- 数据被分为“块”;每个区块都知道上次访问它的时间
- 块在需要时从磁盘拖到内存中
- 低优先级线程监视内存使用情况并删除最近使用最少的内容
要精确监视堆的外观和分配对象,请使用CLR探查器:如果您确实想查看列表和字典实现方式的所有详细信息,请使用非常有用的
另请参阅文档中的“卓越”,它对BCL中缺少的许多集合类型都有非常好的实现。除非出现性能问题,并且探查器向您显示确实存在问题,否则我不会动任何手指。然后你会有一个确定的问题要解决,这会容易得多。为什么在你最初发布这个主题两年多后,现在又重新开始这个主题?请注意,通过编辑它,您可以将其带到头版。除非你想重新对你的问题产生兴趣,否则就让它保持原样,留下它的缺点和一切。你在想什么样的内存数据库?数据集?我的理解是他们的速度非常慢。。。还是你认为我