C# 已知分布的最佳列表容量

C# 已知分布的最佳列表容量,c#,list,capacity,C#,List,Capacity,如果已知最终大小的一般分布,那么在构造函数中定义C列表的容量是否有最佳算法 作为一个具体的例子,如果每个列表中要放置的值的数量的平均值为500,标准偏差为50,且近似正态分布,那么就内存消耗而言,列表的最佳初始容量是多少?由列表决定。除非您遇到具体的性能问题,否则我不会费心设置它,只要使用一个空构造函数就可以了,在这一点上,您可能还需要先解决其他问题 婚前优化是万恶之源。让列表来决定。除非您遇到具体的性能问题,否则我不会费心设置它,只要使用一个空构造函数就可以了,在这一点上,您可能还需要先解决其

如果已知最终大小的一般分布,那么在构造函数中定义C列表的容量是否有最佳算法


作为一个具体的例子,如果每个列表中要放置的值的数量的平均值为500,标准偏差为50,且近似正态分布,那么就内存消耗而言,列表的最佳初始容量是多少?

由列表决定。除非您遇到具体的性能问题,否则我不会费心设置它,只要使用一个空构造函数就可以了,在这一点上,您可能还需要先解决其他问题


婚前优化是万恶之源。

让列表来决定。除非您遇到具体的性能问题,否则我不会费心设置它,只要使用一个空构造函数就可以了,在这一点上,您可能还需要先解决其他问题


婚前优化是万恶之源。

这是个人观点,而不是基于研究,但请记住,列表本身只包含对每个对象的引用,因此最好在分配空间时犯一点错误,为过多的引用分配空间,而不是意外地将您需要的引用数量增加一倍。考虑到这一点,两个甚至三个标准差额外的600或650可能并不过分。但是,同样,这是我的观点,而不是研究结果。

这是个人观点,而不是基于研究,但请记住,列表本身只包含对每个对象的引用,因此最好在分配空间以容纳太多的引用时犯一点错误,而不是意外地将您需要的引用数量增加一倍。考虑到这一点,两个甚至三个标准差额外的600或650可能并不过分。但是,这也是我的观点,而不是研究结果。

没有正确的答案。这将是内存使用和CPU之间的折衷。初始化列表越大,可能浪费的内存越多,但节省的CPU越多,因为以后不必再次调整大小。

没有正确的答案。这将是内存使用和CPU之间的折衷。初始化列表越大,可能浪费的内存越多,但节省的CPU越多,因为以后不必重新调整大小。

如果使用三西格玛规则,说明如果考虑3个标准偏差,单个样本将在99.7%的时间范围内。

如果使用三西格玛规则,说明如果你考虑3个标准差,那么单个样本在99.7%的时间内都在这个范围内。

我做了一些研究,似乎这个问题有一个正确的答案

首先,我同意这可能是过早的优化,所以在决定切换之前进行分析是至关重要的

上面的图表是在excel中生成的,使用正态分布,并使用10000个样本和10000个平均值测试各种初始列表容量过度使用的空间。正如您所看到的,它有几个有趣的特性

对于低标准差,选择一个不好的初始容量可能会浪费最佳选择空间的八倍。 对于相对于平均值的高标准偏差,可能节省较少的成本。 与最低内存损耗相对应的波谷出现在取决于标准偏差的点上。 最好从图的右半部分选择一个值,以避免列表重新分配。 我找不到一个精确的最小损耗公式,但基于此分析,平均值+1.75 x标准偏差似乎是最佳选择。
警告:YMMV与其他分布、手段等。

我做了一些研究,似乎这个问题有一个正确的答案

首先,我同意这可能是过早的优化,所以在决定切换之前进行分析是至关重要的

上面的图表是在excel中生成的,使用正态分布,并使用10000个样本和10000个平均值测试各种初始列表容量过度使用的空间。正如您所看到的,它有几个有趣的特性

对于低标准差,选择一个不好的初始容量可能会浪费最佳选择空间的八倍。 对于相对于平均值的高标准偏差,可能节省较少的成本。 与最低内存损耗相对应的波谷出现在取决于标准偏差的点上。 最好从图的右半部分选择一个值,以避免列表重新分配。 我找不到一个精确的最小损耗公式,但基于此分析,平均值+1.75 x标准偏差似乎是最佳选择。
警告:YMMV与其他分布、平均值等呈正态分布。如果他的数据是一个正常的距离,那么它实际上将是99.85%,因为任何小于容量的数据都适合e
G如果数据大小是mean-7std-devs,它仍然适合他的列表。是的,在问题中,他们声明它近似于正态分布。这假设了正态分布。如果他的数据是一个正态分布,那么它实际上将是99.85%,因为任何小于容量的数据都适合。例如,如果数据大小是mean-7 std DEV,它仍然适合他的列表。是的,在这个问题上,他们声明它近似于正态分布。