none
关于Dictionary<T>的最大对象数量和效率问题? RRS feed

  • 问题

  • 1.请问Dictionary<T>的最大对象数量是多少? 能达到MaxInt 吗? 32位系统与64位系统有区别吗?

    2.Dictionary<T>中的对象数量很多时(如:几十万个)的时候. 那么插入和查找速度会不会受到明显的降低?

    3.Dictionary<int>和Dictionary<string>的插入和检索效率差多少?

    谢谢


    信奎爷,无所畏惧!!
    2011年4月6日 9:10

答案

  • 1.请问Dictionary<T>的最大对象数量是多少? 能达到MaxInt 吗? 32位系统与64位系统有区别吗?

    ---Dictionary<T>的构造函数,参数是 int型,因此理论上可以达到MaxInt, 但是请注意你的内存是否足够大。

    而且C#里面,int和int32是同一个声明,也就是说是有符号 32 位整数, 不会随系统而改变。

    2.Dictionary<T>中的对象数量很多时(如:几十万个)的时候. 那么插入和查找速度会不会受到明显的降低?

    --这个请参考 http://www.cnblogs.com/eaglet/archive/2008/10/23/1317893.html 这是一个网友测试的。

    3.Dictionary<int>和Dictionary<string>的插入和检索效率差多少?

    --没有测试过,楼主可以写一个小程序测试一下,应该和你的string长度有关系

    2011年4月6日 9:39
  • 对于第三个问题我测试了一下:

    Dictionary<int,int> , 500万随机对象时, 插入343毫秒, 检索500万次, 用140毫秒

    Dictionary<string=GUID.NewGUID, int >   500万随机对象时, 插入903毫秒, 检索500万次, 用185毫秒

    也就是说Dictionary<int>比Dictionary<string> 要略快一些, 插入操作的效率快300%, 检索的效率快32%

    检测结果基本可以接受, 因为毕竟插入是一次性的. 而检索的性能差距非常小. 不错!!

    要是64位系统可以管理 MaxInt64 数量的对象就更好了.


    信奎爷,无所畏惧!!
    2011年4月6日 10:21
  • 顺便补充一下. 在这个测试中我发现 在500万次循环中用foreach 的效率比 for更慢. 大约慢了10%.  估计是foreach 每次都需要额外赋值 crrItem的缘故.

    for (int i = 0; i < testTimes; i++)

    foreach (string crrStr in intArray )


    信奎爷,无所畏惧!!
    2011年4月6日 10:31

全部回复

  • 1.请问Dictionary<T>的最大对象数量是多少? 能达到MaxInt 吗? 32位系统与64位系统有区别吗?

    ---Dictionary<T>的构造函数,参数是 int型,因此理论上可以达到MaxInt, 但是请注意你的内存是否足够大。

    而且C#里面,int和int32是同一个声明,也就是说是有符号 32 位整数, 不会随系统而改变。

    2.Dictionary<T>中的对象数量很多时(如:几十万个)的时候. 那么插入和查找速度会不会受到明显的降低?

    --这个请参考 http://www.cnblogs.com/eaglet/archive/2008/10/23/1317893.html 这是一个网友测试的。

    3.Dictionary<int>和Dictionary<string>的插入和检索效率差多少?

    --没有测试过,楼主可以写一个小程序测试一下,应该和你的string长度有关系

    2011年4月6日 9:39
  • 对于第三个问题我测试了一下:

    Dictionary<int,int> , 500万随机对象时, 插入343毫秒, 检索500万次, 用140毫秒

    Dictionary<string=GUID.NewGUID, int >   500万随机对象时, 插入903毫秒, 检索500万次, 用185毫秒

    也就是说Dictionary<int>比Dictionary<string> 要略快一些, 插入操作的效率快300%, 检索的效率快32%

    检测结果基本可以接受, 因为毕竟插入是一次性的. 而检索的性能差距非常小. 不错!!

    要是64位系统可以管理 MaxInt64 数量的对象就更好了.


    信奎爷,无所畏惧!!
    2011年4月6日 10:21
  • 顺便补充一下. 在这个测试中我发现 在500万次循环中用foreach 的效率比 for更慢. 大约慢了10%.  估计是foreach 每次都需要额外赋值 crrItem的缘故.

    for (int i = 0; i < testTimes; i++)

    foreach (string crrStr in intArray )


    信奎爷,无所畏惧!!
    2011年4月6日 10:31