a SortedList<TKey,TValue>和a 之间是否有任何实际的区别SortedDictionary<TKey,TValue>?在任何情况下你会专门使用一个而不是另一个吗?
正如我在上一篇文章中写的那样,我对c#世界还是一个新手,所以我写了一个小基准来比较Dictionary,Hashtable,SortedList和SortedDictionary.该测试运行8000次迭代,从50到100000个元素.我测试了添加新元素,搜索元素并循环遍历一些元素.结果就像我预期的那样,除了SortedDictionary的结果,这让我感到很困惑......所有结果都很慢.所以我错过了关于排序字典概念的一些内容.我已经问了谷歌,但我发现的所有其他人都得到了相同的测试结果.根据他们的测试实施略有不同.我的问题再次出现:为什么SortedDicrionary比其他所有人慢得多?
我听说.NET System.Collections.Immutable集合是作为平衡二叉树实现的,以便Dictionary通过使用整数值GetHashCode作为排序键来满足它们的不变性约束,甚至传统上模拟散列表的集合.
如果我有一个类型,它是便宜生成一个散列码,以及对于便宜的比较(如string或int),我不关心我收集整理的烦躁,这将是有意义的喜欢ImmutableSortedDictionary,因为底层数据结构是否仍然排序?
在优化网站时,我尝试使用 Benchmark.Net 对代码进行基准测试。但我惊讶地发现一些基准测试代码使用的内存多了 40,000 倍。经过太多的基准测试后,我发现内存分配是由于对 SortedList<int, int> 进行 foreach 造成的。
using BenchmarkDotNet.Attributes;
namespace NetCollectionsBenchmarks
{
[MemoryDiagnoser]
public class CollectionsBenchmarks
{
private Dictionary<int, int> DictionaryData = new();
private SortedList<int, int> SortedListData = new();
private Dictionary<int, int> DictionaryCheck = new();
private SortedList<int, int> SortedListCheck = new();
[GlobalSetup]
public void Setup()
{
for (int x = 0; x < 15; x++)
this.DictionaryData.Add(x, x);
this.SortedListData = new SortedList<int, int>(this.DictionaryData);
this.DictionaryCheck = new Dictionary<int, int>(this.DictionaryData);
this.SortedListCheck = new SortedList<int, int>(this.DictionaryData);
}
[Benchmark(Baseline = true)]
public …Run Code Online (Sandbox Code Playgroud) 我正在寻找.NET 4中的内置二进制搜索树实现.有一个吗?
c# ×4
.net ×3
sortedlist ×2
.net-4.0 ×1
benchmarking ×1
binary-tree ×1
dictionary ×1
generics ×1