参数传递给方法以删除对象创建

本文关键字:对象 创建 删除 方法 参数传递 | 更新日期: 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>)创建的所有资源都将被处置。