清除集合或重新初始化?

时间:2012-04-24 12:29:06

标签: .net performance collections

我正在开发一个.net应用程序,我正在使用一个由5个Lists和1个Hashtable组成的对象。此对象在循环中使用,该循环至少迭代500次以运行某些分析。在每个循环中,这个对象应该从空开始,所以我想知道在所有Lists和Hashtable上调用clear是否更有效,或者我应该重新初始化对象?

我知道我可以编写代码来对此进行基准测试,但我想知道是否有人已经走了这条路?

感谢。

2 个答案:

答案 0 :(得分:6)

创建3000个空集合的成本很小。除非你的“分析”真的微不足道,否则这根本不会很重要。尽可能编写最清晰的代码 - 这可能每次都创建一组新的集合而不是重用它们。如果逻辑操作要重用它,则应该只重用一个对象。

一旦您以最易读的方式编写代码,请测试它是否能够满足您的需求。如果没有,那么就可以开始微观优化。

,但强烈建议您使用Dictionary<,>代替Hashtable

答案 1 :(得分:4)

虽然我同意另一个答案,即这是微优化,但为了回答这个问题,我发现使用List时新List比Clear更快。这是我的基准代码:

static void Main(string[] args)
    {
        var start = DateTime.Now;
        List<string> lst = new List<string>();

        for (int i = 0; i < 3000; ++i)
        {
            //lst = new List<string>();
            lst.Clear();
            for (int j = 0; j < 500; ++j)
            {
                lst.Add(j.ToString());
            }
        }

        Console.WriteLine("{0} ms", ((DateTime.Now - start).Ticks / TimeSpan.TicksPerMillisecond));
        Console.ReadLine();
    }

超过五次运行,新列表平均为340.8 ms,清除平均值为354.8 ms。

然而,这个结果非常接近,很明显:

  1. 差异可能毫无意义
  2. 我可能通过执行此基准测试浪费了我的时间