预测词典>>尺寸和速度
我需要准确计算不同大小的字典的大小。我尝试在运行应用程序时进行一些内存监视,但我同时做了很多其他事情,这会影响结果。
如何计算包含 n 个项目的字典的(大约)预期大小?我需要知道在不同场景下我需要多少内存。
查找时间增加的因素是什么? O(1) 总是?
我计划使用字典来存储超过 1000 万个条目,甚至可能更多。
已经考虑了字典的大小的问题
I need to accurately calculate the size of a Dictionary for different sizes. I've tried doing some memory monitoring while running my application, but I am doing a lot of other stuff at the same time that affects the result.
How can I calculate (aprox) expected size of a Dictionary with n items? I need to know how much RAM I need in different scenarious.
By what factor does lookup time increase? O(1) ALWAYS?
I'm planning to use dictionaries for 10M+ entries, probably more.
Already consideret question for Size of a dictionary
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了回答我自己的问题,我创建了一个小型测试程序。
结果如下:
在包含 10 000 000 个随机条目的表中进行 100 000 次随机查找需要 0.02 秒,该表使用 200MB RAM。
一旦超过 100 个项目,字典使用的内存似乎是 Int32 索引的 20-22 倍左右。 随着字典变大,该比率会下降。
预分配内存似乎显着减少了插入时间。
测试详细信息和结果位于 http://blog.tedd.no/2011/09/26/net-dictionary-speed-and-memory/
To answer my own question I created a small test program.
Here are the results:
100 000 random lookups in a table consisting of 10 000 000 random entries takes 0,02 seconds, the table uses 200MB of RAM.
Memory used by a dictionary seems to be around 20-22 times for Int32 index once you get above 100 items. The ratio goes down as the dictionary gets larger.
Pre-allocating memory seems to cut down noticeable on insert time.
Details of the test and results at http://blog.tedd.no/2011/09/26/net-dictionary-speed-and-memory/