web*_*ber 0 .net collections performance
我正在开发一个.net应用程序,我正在使用一个由5个Lists和1个Hashtable组成的对象.此对象在循环中使用,该循环至少迭代500次以运行某些分析.在每个循环中,这个对象应该从空开始,所以我想知道在所有Lists和Hashtable上调用clear是否更有效,或者我应该重新初始化对象?
我知道我可以编写代码来对此进行基准测试,但我想知道是否有人已经走了这条道路?
谢谢.
创建3000个空集合的成本很小.除非你的"分析"真的微不足道,否则这根本不会很重要.尽可能写出最清晰的代码 - 这可能是每次创建一组新的集合而不是重用它们.如果逻辑操作要重用它,则应该只重用一个对象.
一旦以最易读的方式编写代码,请测试它是否能够满足您的需求.如果没有,那么您可以开始微优化.
我会,但是,强烈建议您使用Dictionary<,>代替Hashtable.
尽管我同意这是一个微优化的其他答案,但为了回答这个问题,我发现使用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();
}
Run Code Online (Sandbox Code Playgroud)
在五次运行中,新的List平均为340.8 ms,而Clear平均为354.8 ms。
但是,此结果是如此接近,很明显: