如果已知最终大小的一般分布,是否有最佳算法来定义构造函数中C#列表的容量?
作为一个具体的例子,如果每个列表中放置的值的数量平均值为500,标准差为50,则具有近似正态分布,就内存而言,列表的最佳初始容量是多少?消费
答案 0 :(得分:1)
离开清单来决定。我不打扰设置它(只使用空构造函数),除非遇到具体的性能问题,此时可能还有其他事情可以先解决。
早期优化是万恶之源。
答案 1 :(得分:1)
这是个人意见,而不是基于研究,但请记住,List本身只保存引用到每个对象,因此最好在一边为一些分配空间而犯错误一些太多的引用,而不是意外地加倍你需要的引用量。考虑到这一点,额外(600或650)的两个甚至三个标准偏差可能不会超出范围。但是,这是我的意见,而不是研究结果。
答案 2 :(得分:1)
如果您使用三西格玛规则,http://en.wikipedia.org/wiki/68-95-99.7_rule表示如果您考虑3个标准差,则单个样本将在99.7%的时间内处于该范围内。
答案 3 :(得分:1)
我做了一些研究,似乎对这个问题有一个“正确”的答案。
首先,我同意这可能是过早优化,因此在决定切换之前进行分析是必不可少的。
上图是使用正态分布在excel中生成的,并使用10,000个样本和平均值10,000来测试各种初始列表容量过度使用的空间。如您所见,它有几个有趣的功能。
警告:YMMV与其他发行版,意味着等。
答案 4 :(得分:0)
没有正确答案。这将是内存使用和CPU之间的权衡。初始化列表越大,你可能浪费的内存越多,但节省了CPU,因为它不必在以后再次调整大小。