C#/.NET是否有办法为例程预分配一定量的空间?

r1zhe5dt  于 2023-03-20  发布在  .NET
关注(0)|答案(2)|浏览(114)

或者让我给予一个具体的例子。
假设我写了一个返回List<int>的所有子集的方法,令n = .Count,我知道有n^2个子集(假设存储为List<int> s),每个子集的大小在1n之间,因此我知道分配
n ^2 * n * sizeof(int) + [一些额外空间]
应该能打开足够的空间。
我希望我为子集创建的每个new List<int>(capacity: n)都能快速分配。
有没有办法做这个预分配,还是我的想法全错了?

xxslljrj

xxslljrj1#

从技术上讲,您可以创建所有的列表,并使用您要填充的项目数来填充它们,但您也可以使用垃圾来填充它们,然后覆盖这些值。
但是,您不应该投入太多精力来优化一个代码,它不是(还)有性能问题。你应该以最自然的方式实现你的程序,并确保它工作。测量时间。做压力测试。如果你有性能问题,那么当你有问题时,你会比以前有更多关于这个问题的信息,当你计划你的代码时。你可能会试图优化一个无论如何都不会存在的问题。
所以,如果你担心你的方法的性能,那么你也应该实现“创建”和“添加”到你要返回的子列表中。首先,你可以把创建实现为newList,把添加实现为对.Add()方法的调用。以后,如果你最终遇到性能问题,那么你将改变这些方法,这样,“创建”将仅返回已经创建的列表,而“添加”将仅改变索引处的值。

9vw9lbht

9vw9lbht2#

List<T>构造函数接受一个可选的capacity参数,该参数告诉列表要预分配多少个元素。

相关问题