性能问题:StringCollection vs List<String>

39

我想知道何时应该使用List< string >,何时应该使用StringCollection

假设我需要处理大量字符串(例如10MB的文本文件)。

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

但有时候,当我告诉一个GridView它的数据源是List< String >时,我觉得List< T >有点...

那么,有人知道这些集合的优缺点,涉及速度和内存占用吗?

就功能而言,我相信每个人都会同意List是最好的,所以我的问题不是关于功能的。考虑到该问题属于Frameworks 4.0上的项目,因此两者都可以使用。

3个回答

52

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

  • 不需要记住仅适用于字符串的特定类型
  • 它实现了泛型接口 IEnumerable<T> 而非仅限于 IEnumerable,因此支持 LINQ
  • 它在 SilverLight 中受到支持
  • 对于大多数开发者来说,它更符合习惯(个人观点)

如果你可以用数据支撑,我会十分惊讶地发现 StringCollectionList<string> 显著更快。我的唯一犹豫是,GridView 可能会硬编码支持 StringCollection 并使其与该类型速度更快 - 但我觉得这种可能性相当小。


7
哎呀,没错!StringCollection 不支持 IEnumerable<string>。这是个很大的问题。是的,把 StringCollection 放弃掉吧。 - Patrick Karcher
1
关于速度问题,我注意到它经常变化,有时StringCollection更快,有时则相反。但是内存呢?List<string>在内存中占用的空间比StringCollection多吗? - GianT971
8
如果你使用IlSpy查看StringCollection的代码,你会发现StringCollection是围绕着ArrayList构建的一个包装器,提供了一些强类型方法来添加、删除等等操作... 现在,考虑到ArrayListList<>使用相同的增长算法(每次扩展为原来的两倍),它们之间在速度和内存大小上不应该有明显的区别。 - xanatos

26

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

List<string> 实际上可能会更快一些。它是对早期非泛型的 ArrayList 的封装。虽然没有装箱/拆箱,但据我所知,在幕后仍有一两个额外的步骤。

在 .NET 2.0 之前,StringCollection 很方便,因为它与字符串强类型绑定,这是一个非常常见的列表需求。不过现在我建议使用 List<string>。由于大多数框架和第三方程序集将使用它而不是 StringCollection,这样做可以:

  • 避免很多转换
  • 避免一些困惑。其他(尤其是新手)开发人员会不断地想知道你在使用 StringCollection 的原因是什么。

4

List<string>不是ArrayList的包装器。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接