参数传递给方法以删除对象创建
本文关键字:对象 创建 删除 方法 参数传递 | 更新日期: 2023-09-27 18:13:19
在我刚接手的一个项目中有以下代码,它在我们团队中引发了一场关于这种方法是否正确的争论:
public void Method()
{
var reusableList = new List<string>();
for (int i = 0; i < 100000000; i++)
{
var result = HelperMethod(i, reusableList);
}
}
private static object HelperMethod(int someObject, List<string> something)
{
something.Clear();
//do something with the list
something.Add(someObject.ToString());
return something[0];
}
方法" method "运行一个循环,使用helper方法多次处理一些数据(这里的代码当然不是真正的代码…),可重用列表被传递给helper方法,以减少内存和提高性能。在方法"method"中没有使用列表(这会降低代码的可读性),但是一次又一次地创建它会降低性能并增加内存消耗,这里最好的方法是什么?
List<T>
在内部使用数组。如果你向列表中添加了新的元素,并且数组中没有剩余的空间,那么将分配一个双倍大小的新数组,并且将当前数组中的所有对象复制到新数组中。这需要一些时间。根据数组中项目的数量,这可能会产生影响。尤其是在添加了很多项目的时候。当使用列表的"共享"实例时,当调用List<T>.Clear()
时,List<T>
的内部数组不会收缩。使用这个实例一段时间后,您就不再有这个开销了。作为另一种选择,当期望列表中有很多项时,可以在构造函数中指定列表的初始容量。
这意味着:理论上它更快。但我怀疑你是否真的认识到其中的区别。
我更喜欢好的代码可读性
首先Method()
不会被for
循环一遍又一遍地执行。如果你说的是HelperMethod()
,那么一次又一次地调用它不会有任何内存问题,因为一旦它被执行,它(int and List<string>
)创建的所有资源都将被处置。