也许这个问题已经以许多不同的方式回答了很多次。不过,我正在寻找更具体的东西。通用字典,我认为比哈希表更快,因为他们不需要经历装箱/拆箱的过程。Hashtable vs Dictionary:更快?
然而,不哈希表进行排序,这意味着搜索可能会更快?由于密钥被散列和存储,搜索时是否会涉及装箱/拆箱?
也许这个问题已经以许多不同的方式回答了很多次。不过,我正在寻找更具体的东西。通用字典,我认为比哈希表更快,因为他们不需要经历装箱/拆箱的过程。Hashtable vs Dictionary:更快?
然而,不哈希表进行排序,这意味着搜索可能会更快?由于密钥被散列和存储,搜索时是否会涉及装箱/拆箱?
然而,是不是哈希表进行排序真实,这可能意味着,搜索可能会更快?
我不相信哈希表进行排序。
他们共享一个类似的底层实现,但Dictionary<TKey, TValue>
已被推荐超过Hashtable
很长一段时间,由于它消除了装箱/拆箱,这对值类型会更好。
见https://referencesource.microsoft.com/#mscorlib/system/collections/hashtable.cs,77
如果你真的想知道,尝试基准它。 BenchmarkDotNet是一个伟大的图书馆。
Hashtable
将被视为弃用,但兼容性和一些边缘情况除外,例如COM Interop
。
词典还提供类型安全和避免装箱过程(这使得它们在一般的快)。
但是,如果您确实想知道它具有哪些性能影响,则两种类型都使用Stopwatch
跨两个相同的数据集执行相同的操作,并注意时间差异!
的代码看起来是这样的:
Stopwatch clock = new Stopwatch();
clock.Start();
foreach (var item in myCol)
{
Hashtable ht = new Hashtable();
//DoSomething()
}
clock.Stop();
var tHash = clock.Elapsed;
Stopwatch clock = new Stopwatch();
clock.Start();
foreach (var item in myCol)
{
Dictionary<,> dict = new Dictionary<,>();
//DoSomething()
}
clock.Stop();
Console.Write($"Delta t = {Math.Abs((tHash - clock.Elapsed).TotalMilliseconds)}"ms);
它只会是拳击/如果你是在'Hashtable'使用值类型(结构)拆箱。否则,它只是在检索条目时想要获取特定类型时进行投射。你也应该使用'HashSet',这是一个通用的查找而不是'Hashtable'。 – Igor
[当有人问约束性的链接“这是更快吗?”(https://ericlippert.com/2012/12/17/performance-rant/) – DavidG
是什么让你认为一个哈希表排序什么? – Servy