0

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

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

谢谢。

4

2 回答 2

6

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

以最易读的方式编写代码后,请测试它的性能是否与您需要的一样好。如果没有,那么您可以开始微优化。

但是,我强烈建议Dictionary<,>您使用而不是Hashtable.

于 2012-04-24T12:31:21.460 回答
5

虽然我同意另一个答案,即这是一个微优化,但为了回答这个问题,我发现使用 List 时 new 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();
    }

在五次运行中,新 List 平均为 340.8 ms,Clear 平均为 354.8 ms。

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

  1. 差异可能没有意义
  2. 我可能通过执行这个基准来浪费我的时间
于 2012-04-24T12:43:01.420 回答