Подтвердить что ты не робот

Производительность: StringCollection vs List <String>

Мне было интересно, когда я должен использовать List <string> и когда я должен использовать StringCollection.

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

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

Но иногда я нахожу список List <T> медленно, когда, например, сообщая Gridview, что его источник данных является List <String> ...

Знаете ли вы все плюсы и минусы этих коллекций, касающиеся скорости и веса в памяти?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

List<string> не является оберткой над ArrayList

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