【问题标题】:Performance concern: StringCollection vs List<String>性能问题:StringCollection 与 List<String>
【发布时间】:2011-10-14 22:50:08
【问题描述】:

我想知道什么时候应该使用 List,什么时候应该使用 StringCollection

假设我必须处理大量字符串(例如 10mb 的文本文件)。

我知道 List 提供的功能比 字符串集合

但有时我会发现 List slow,例如告诉 Gridview 其数据源是 List...

那么有谁知道这些集合的优缺点,包括速度和内存重量?

关于它们的功能,我相信每个人都会同意说 List 是最好的,所以我的问题与此无关。考虑一下这个问题是关于 Frameworks 4.0 上的项目,所以两者都可以使用。

【问题讨论】:

    标签: c# performance list .net-4.0 stringcollection


    【解决方案1】:

    我个人更喜欢使用List&lt;string&gt;

    • 无需只为字符串记住一种特定类型
    • 它实现了通用的IEnumerable&lt;T&gt; 而不仅仅是IEnumerable,因此支持LINQ
    • SilverLight 支持它
    • 对于大多数开发人员 (IMO) 来说,它更符合习惯

    我真的很惊讶StringCollectionList&lt;string&gt; 快得多 - 看看你是否可以用数字来支持这一点。我犹豫的唯一原因是GridView 可能对StringCollection 提供硬编码支持,以使其快速使用该类型 - 但这在我看来不太可能。

    【讨论】:

    • 哎呀,没错! StringCollection 不支持 IEnumerable。巨大的因素。是的,扔掉 StringCollection。
    • 关于速度问题,我注意到它变化很大,有时 StringCollection 更快,有时则相反。但是内存呢? List 在内存中的位置是否比 StringCollection 多?
    • @GianT971 如果你用 IlSpy 查看StringCollection 代码,你会发现StringCollectionArrayList 周围的一个垫片,它提供了一些强类型的方法来添加、删除......现在,考虑到 ArrayListList&lt;&gt; 使用相同的增长算法(每次 *2 旧大小),速度或内存大小不应该有任何有意义的差异。
    【解决方案2】:

    在性能和效率方面,它们将非常相似。

    List&lt;string&gt; 实际上可能会快一点。它是一种围绕前通用 ArrayList 的包装器。没有装箱/拆箱,但在引擎盖下仍有一两个额外的步骤,IIRC。

    StringCollection 在 .NET 2.0 之前很方便,因为它被强类型化为字符串,需要一个列表是很常见的事情。我建议现在使用List&lt;string&gt;。由于大多数框架和第 3 方程序集将使用它而不是 StringCollection,因此:

    • 避免大量转换
    • 避免一些混乱。其他(尤其是较新的)开发人员会一直想知道您使用 StringCollection 的原因是什么。

    【讨论】:

      【解决方案3】:

      List&lt;string&gt; 不是ArrayList 的包装器

      这是ArrayList 的一个新实现,它通过一个数组(当count 变得大于其长度时将其大小调整为双倍大小)和一个count 属性来实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2010-10-14
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        相关资源
        最近更新 更多