代码之家  ›  专栏  ›  技术社区  ›  dr. evil

内存使用情况,排序列表与列表问题

  •  7
  • dr. evil  · 技术社区  · 16 年前

    我在一个存储大约15-100K数据的类中使用了SortedList()。

    然而,在这种情况下,我注意到List()消耗了大约20%+的内存。

    9000个项目:

    • 排序列表:105MB
    • 列表:125MB

    15K个项目:

    • 排序列表:115MB
    • 列表:140MB

    附言2:我的应用程序在启动时有大约80 MB的基本内存分配。因此,数字应为105-80=25,125-80=45,以此类推

    结果

    • Hashset在内存方面非常糟糕,消耗的内存远远超过预期。这就是问题所在。SortedList()设法为类似的功能使用更少的内存。

    274毫秒-226 MB

    34868毫秒-230兆字节

    哈希集

    字典(OF字符串、对象)

    486毫秒-234 MB

    虽然当我把计数减少到25时,然后:

    哈希集 为286 Mb

    关于Hashset内存使用情况: http://blog.mischel.com/2008/04/09/hashset-limitations/

    6 回复  |  直到 16 年前
        1
  •  3
  •   Guffa    16 年前

    List<T> 能力?

    我做的小实验:

    List<int> list = new List<int>(0);
    
    for (int i = 0; i < 100000000; i++)
    {
        list.Add(i);
    }
    

    此程序大约需要320MB

    List<int> list = new List<int>(100000000);
    
    for (int i = 0; i < 100000000; i++)
    {
        list.Add(i);
    }
    
        2
  •  9
  •   Shay Erlichmen    16 年前

    A. List<T> 9k项目的容量将在9k到18k之间,因此这些项目的开销将在36到72KB之间(64位系统上的双倍)。

        3
  •  2
  •   Jerry Bullard    16 年前

    如果你已经有了一个集合的HashSet,我不知道为什么你也需要一个List,但如果你在寻找一个保证唯一性和ContainsKey()功能的容器,为什么不需要一个通用字典呢?

    SciTech's .NET Memory Profiler ANTS Profiler

        4
  •  1
  •   Lotfi    16 年前

    哈希集(&hashtables)使用大量内存!远不止一个简单的列表/排序列表

        5
  •  0
  •   Abhijeet Patel    16 年前

        6
  •  0
  •   reccles    16 年前

    我建议你看看玻璃名单( http://sites.google.com/site/glazedlists/ ).这些分类非常快,记忆力也很好。