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

时间:2014-07-16 10:31:57

标签: c# performance memory

我刚刚搬到的项目中有以下代码,它在我们的团队中提出了一个辩论:这是否是正确的方法:

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];
}

方法“方法”运行循环处理一些数据使用辅助方法很多次(这里的代码当然不是真正的代码......)并且可重用的列表被传递给辅助方法以减少内存目的和性能目的。 “方法”方法中没有使用该列表(这会降低代码的可读性),但反复创建它会降低性能并增加内存消耗,这里最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

List<T>在内部使用数组。如果将新项添加到列表中并且数组中没有剩余空间,则将分配双倍大小的新数组,并将当前数组中的所有对象复制到新数组。这需要一些时间。根据数组中的项目数量,这可能会产生影响。特别是在添加大量物品时。当像您一样使用列表的“共享”实例时,List<T>的内部数组在调用List<T>.Clear()时不会缩小。使用此实例一段时间后,您不再需要此开销。作为替代方案,当您期望列表中的大量项目时,您可以在构造函数中指定列表的初始容量。

这意味着:它在理论上更快。但我怀疑你是否真的认识到了这一点。

我更喜欢良好的代码可读性

答案 1 :(得分:0)

首先,Method()循环不会一次又一次地执行for。如果你在谈论HelperMethod()那么,一遍又一遍地调用它将不会有任何内存问题,因为一旦执行它将创建它创建的所有资源(int and List<string>)。

相关问题