当使用排序列表 TKEY的,TValue在一个SortedDictionary TKEY的,TValue?(When to use a SortedList<TKey, TValue> over a SortedDictionary<TKey, TValue>)

   IT问题网   2018-12-04 00:00:00

问 题

这可能表现为这种重复<一个href="http://stackoverflow.com/questions/935621/whats-the-difference-between-sortedlist-and-sorteddictionary">question,它问:"什么是间排序列表和的sorteddictionary~~md~~aux 的?"遗憾的是,答案做无非引用msdn文档(其中明确规定,有两者之间的性能和内存使用的差异),但实际上并没有回答这个问题。

在事实上(所以这个问题不得到同样的答案),根据msdn:

在排序列表 tkey的,tvalue 通用 类是用二进制搜索树 o(log n)的检索,其中n是 在字典中的元素数目。 在此,它是类似于 sorteddictionary tkey的,tvalue 通用 类。这两个类具有相似的 对象模型,并且都为o(log n)的 检索。其中,这两个类 不同之处在于内存使用和速度 插入和删除:

  • 排序列表 tkey的,tvalue 使用较少 内存比 sorteddictionary tkey的, tvalue

  • sorteddictionary tkey的,tvalue 有 更快的插入和移除 对于未排序的数据操作,o(log n)的 而不是为o(n),用于 排序列表 tkey的,tvalue

  • 如果该列表中填充一次全部 从排序的数据,排序列表 tkey的, tvalue 比快 sorteddictionary tkey的,tvalue

因此,很明显,这将表明,排序列表 tkey的,tvalue 是更好的选择除非您需要更快的插入和删除操作的未分类数据。

现在的问题仍然存在,鉴于上面有什么实际的(真实世界,商业案例等)的理由使用的信息 sorteddictionary tkey的,tvalue?基于性能的信息,这将意味着,真的有没有必要有 sorteddictionary tkey的,tvalue 所有

解决方案

我不知道如何准确的msdn文档是排序列表和 sorteddictionary 。这似乎是说两者都使用二叉搜索树实现。但是,如果sortedlist的使用二叉搜索树,为什么会是在增加比 sorteddictionary ?

慢得多

总之,这里有一些性能测试结果。

每个测试运行在一个排序列表 /sorteddictionary 包含10,000个int32键。每次测试重复1.000倍(发布版本,不开始调试)。

测试第一组的顺序添加键从0到9,999。测试第二组在0到9,999添加随机洗牌键(每个号码添加只有一次)。

***** tests.performancetests.sortedtest

sorteddictionary添加排序:4411毫秒
sorteddictionary获取排序:2374毫秒


排序列表添加排序:1422毫秒
排序列表获取排序:1843毫秒

***** tests.performancetests.unsortedtest

sorteddictionary添加未分类:4640毫秒
sorteddictionary获取未分类:2903毫秒


排序列表添加未分类:36559毫秒
排序列表获取未分类:2243毫秒
 

对于任何分析,最重要的是相对业绩,而不是实际的数字。

正如你所看到的,在排序的数据排序列表比 sorteddictionary 更快。在未排序的数据的排序列表是稍快的检索,但增加速度较慢约9倍。

如果两者都是内部使用二叉树,这是相当令人惊讶的是对未排序的数据的添加操作是排序列表这么慢得多。这是可能的排序的列表也可以将项目添加到排序的线性数据结构的同时,这会慢下来。

不过,你所期望的内存使用排序列表等于或大于或至少等于 sorteddictionary 。但是,这有什么矛盾msdn文档说。

标签:使用排序列表一个



分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

如何初始化列表 T给定的尺寸(相对于容量)?(How to initialize a List&lt;T&gt; to a given size (as opposed to capacity))

problem .net offers a generic list container whose perfor ...

如何使用XPath用的XDocument?(how to use XPath with XDocument)

problem there is a similar question, but it seems that th ...

什么是WebConfigurationManager和ConfigurationManager中的区别?(What&#39;s the difference between the WebConfigurationManager and the ConfigurationManager)

problem what's the difference between the webconfiguratio ...

NUnit的测试运行秩序(NUnit Test Run Order)

problem by default nunit tests run alphabetic ...

如何恢复从C#数据库(How to restore a database from C#)

problem i have a sql 2008 db. i am running a form that ba ...

调用堆栈不说&QUOT;你来自哪里&QUOT;但是&QUOT;你要去哪里,下一个&QUOT;?(The call stack does not say &quot;where you came from&quot;, but &quot;where you are going next&quot;)

problem in a previous question (get object ca ...

如何读取和写入ID3标签在C#中的MP3?(How to read and write ID3 tags to an MP3 in C#)

problem is there a library for reading and writing id3 ta ...

如何设置读取权限的X.509证书从.NET私钥文件(How to set read permission on the private key file of X.509 certificate from .NET)

problem here is the code to add a pfx to the cert store. ...

获取列表视图的项目双击事件(Get the item doubleclick event of listview)

problem how to get the item double click event of listvie ...

MongoDB的交易?(MongoDB transactions)

problem playing around with mongodb and norm in .net. th ...

确定是否.NET程序集是从相同的源代码构建(Determine whether .NET assemblies were built from the same source)

problem does anyone know of a way to compare two .net ass ...

如何prevent更新一个ListViewItem的的文字时,在闪烁的ListView?(How to prevent flickering in ListView when updating a single ListViewItem&#39;s text)

problem all i want is to update an listviewit ...

谁应该调用Dispose IDisposable的对象时传递到另一个对象?(Who should call Dispose on IDisposable objects when passed into another object)

problem is there any guidance or best practic ...

获得一天的后缀使用则DateTime.ToString时,()(Getting day suffix when using DateTime.ToString())

problem is it possible to include the day suffix when for ...

改变目标框架我在Visual Studio解决方案的所有项目(Change the Target Framework for all my projects in a Visual Studio Solution)

problem i need to change the target framework ...

string.IsNullOrEmpty(串)与string.IsNullOrWhiteSpace(串)(string.IsNullOrEmpty(string) vs. string.IsNullOrWhiteSpace(string))

problem is use of string.isnullorempty(string ...

上传文件使用C#到ftp(Upload file to ftp using c#)

problem i try upload a file to an ftp-server with c#. the ...

什么是App.config中呢?(What is app.config for)

problem settings.settings generates settings.designer.cs ...

我可以使用ASP.NET MVC与常规ASP.NET Web表单(Can I use ASP.NET MVC together with regular ASP.NET Web forms)

problem i have on request from a client built a huge site ...

更优雅的异常处理不是多个catch块?(More Elegant Exception Handling Than Multiple Catch Blocks)

problem using c#, is there a better way to handle multipl ...