Проблемы производительности: StringCollection vs List <String> - PullRequest
32 голосов
/ 15 октября 2011

Мне было интересно, когда мне следует использовать List и когда мне следует использовать StringCollection .

Допустим, мне приходится иметь дело с большим количеством строк (например, текстовые файлы размером 10 Мб).

Я знаю, что List предоставляет более мощные функции, чем StringCollection .

Но иногда я как-то нахожу список медленным , когда, например, говорю Gridview, что его источником данных является List ...

Так кто-нибудь знает плюсы и минусы этих коллекций, касающиеся скорости и веса в памяти?

Что касается их функциональности, я уверен, что все согласятся сказать, что List - лучший, поэтому мой вопрос не об этом. Рассмотрим вопрос о проектах на Frameworks 4.0, поэтому можно использовать оба варианта.

Ответы [ 3 ]

49 голосов
/ 15 октября 2011

Я бы лично предпочел использовать List<string>:

  • Нет необходимости запоминать один конкретный тип только для строк
  • Он реализует общий IEnumerable<T>, а не просто IEnumerable и, следовательно, поддерживает LINQ
  • Он поддерживается в SilverLight
  • Для большинства разработчиков (IMO) это более идиоматично

Я был бы очень удивлен, обнаружив StringCollectionчтобы быть значительно быстрее, чем List<string> - посмотрите, можете ли вы подтвердить это числами.Моя единственная причина сомнений в том, что GridView потенциально может иметь жестко запрограммированную поддержку StringCollection, чтобы сделать его быстрым с этим типом, но для меня это маловероятно.

23 голосов
/ 15 октября 2011

С точки зрения производительности и эффективности они будут очень похожи.

List<string> может быть немного быстрее на самом деле. Это своего рода обертка вокруг предварительно универсального ArrayList. Там нет бокса / распаковки, но есть еще один или два дополнительных шага под капотом, IIRC.

StringCollection была удобна до .NET 2.0, потому что она строго типизирована в строку, очень часто требуется список. Хотя я бы предложил использовать List<string> сейчас. Поскольку большинство фреймворков и сторонних сборок будут использовать его вместо StringCollection, это будет:

  • избегайте большого количества кастинга
  • Избегайте путаницы. Другие (особенно новички) разработчики будут постоянно интересоваться, почему вы используете StringCollection.
5 голосов
/ 14 июля 2014

List не является оберткой над ArrayList.Это новая реализация ArrayList, реализованная с использованием массива (размер которого увеличивается до двойного размера, когда значение Count становится больше его длины) и свойством Count.

...