gpt4 book ai didi

c# - 帮助 C#.NET 通用集合性能和优化

转载 作者:行者123 更新时间:2023-11-30 18:55:55 25 4
gpt4 key购买 nike

我正在尝试优化一段 .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, "");
}

看起来字典已经被编写这段代码的人使用了,即使不需要(只使用键来存储唯一值列表)因为比搜索 myType 对象的列表更快。这似乎显然是错误的,因为它只是字典的键,但我试图了解什么是修复它的最佳方法。

问题:

1) 我似乎明白即使只使用 .NET 3.5 HashSet 也会获得很好的性能提升。这是正确的吗?

2) 在 .NET 2.0 中优化上述代码的最佳方法是什么?为什么?

编辑:这是我正在尝试优化的现有代码,它循环遍历数十万个项目,并且为每个项目调用一个 ContainsKey。一定有更好的方法(即使在 .NET 2.0 中)! :)

最佳答案

我认为您需要将其分解为 2 个问题

Dictionary<myType,string>此场景的最佳可用类型

没有。根据您的分割,HashSet<myType>显然是更好的选择,因为它的使用模式更符合场景

将切换到Hashset<myType>给我性能提升?

这真的很主观,只有分析人员才能给您这个问题的答案。您可能会看到集合中每个元素的内存大小有非常小的改进。但就原始计算能力而言,我怀疑你会看到巨大的差异。只有探查器才能告诉您是否存在。

在对代码进行性能相关更改之前,请记住黄金法则。

Don't make any performance related changes until a profiler has told you precisely what is wrong with your code.

违反此规则的更改只是猜测。分析器是衡量性能修复成功与否的唯一方法。

关于c# - 帮助 C#.NET 通用集合性能和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com