性能问题:StringCollection与List <String>

Gia*_*971 33 c# performance list .net-4.0 stringcollection

我想知道何时应该使用List <string>以及何时应该使用StringCollection.

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

我知道List <T>提供了比StringCollection更强大的功能 .

但有时我发现List <T> 很慢,例如告诉Gridview它的数据源是List <String> ...

那么有谁知道这些收藏品的优缺点,关于记忆中的速度和重量?

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

Jon*_*eet 50

我个人更喜欢使用List<string>:

  • 无需为字符串记住一种特定类型
  • 它实现了泛型IEnumerable<T>而不仅仅是IEnumerable,因此支持LINQ
  • SilverLight支持它
  • 对于大多数开发者来说,它更具惯用性(IMO)

我会惊讶地发现StringCollection速度要快得多List<string>- 看看你是否可以用数字来支持它.我犹豫的唯一原因是GridView可能有硬编码的支持,StringCollection以使其快速使用该类型 - 但这对我来说听起来不太可能.

  • 唉,这是对的!StringCollection不会运行IEnumerable <string>.巨大的因素.是的,扔掉StringCollection. (7认同)
  • @ GianT971如果你看看带有IlSpy的`StringCollection`代码,你会发现`StringCollection`是一个围绕`ArrayList`的垫片,它提供了一些强类型的方法来添加,删除......现在,考虑到`ArrayList`和` List <>`使用相同的增长算法(每次大小为*2),速度或内存大小不应有任何有意义的差异. (7认同)

Pat*_*her 25

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

List<string>实际上可能会快一点.它是预先通用的ArrayList的包装器.没有拳击/拆箱,但是还有一两个额外的一步,IIRC.

StringCollection在.NET 2.0之前很方便,因为它被强类型化为字符串,非常常见的想要列表.我建议List<string>现在使用.由于大多数框架和第三方程序集将使用它而不是StringCollection,这将:

  • 避免大量的铸造
  • 避免一些混乱.其他(特别是较新的)开发人员会不断地想知道你使用StringCollection的原因是什么.