Joh*_*dol 2 .net c# generics performance dictionary
我正在尝试优化一块看起来像这样的.NET 2.0 C#代码:
Dictionary<myType, string> myDictionary = new Dictionary<myType, string>();
// some other stuff
// inside a loop check if key is there and if not add element
if(!myDictionary.ContainsKey(currentKey))
{
myDictionary.Add(currentKey, "");
}
Run Code Online (Sandbox Code Playgroud)
看起来像编写这段代码的人已经使用了字典,即使不需要(只有密钥用于存储唯一值列表),因为比搜索的myType对象列表更快.这似乎显然是错误的,因为只有字典的关键,但我试图了解什么是解决它的最佳方法.
问题:
1)我似乎明白,即使只使用.NET 3.5 HashSet,我也会获得良好的性能提升.它是否正确?
2)在.NET 2.0中优化上述代码的最佳方法是什么?为什么?
编辑:这是我试图优化的现有代码,它循环遍历数十万个项目,并且每个项目都调用一个ContainsKey.有一个更好的方法(即使在.NET 2.0中)!:)
Jar*_*Par 10
我认为你需要将其分解为2个问题
Dictionary<myType,string>
此方案的最佳可用类型根据您的细分,HashSet<myType>
显然是更好的选择,因为它的使用模式更准确地适合场景
Hashset<myType>
会给我带来性能提升吗?这是非常主观的,只有剖析器可以为您提供这个问题的答案.可能你会看到集合中每个元素的内存大小改进非常小.但就原始计算能力而言,我怀疑你会看到巨大的差异.只有剖析器可以告诉您是否有.
在您对代码进行与性能相关的更改之前,请记住黄金法则.
在剖析器准确告诉您代码的错误之前,请勿进行任何与性能相关的更改.
进行违反此规则的更改只是猜测.分析器是衡量性能修复成功的唯一方法.