Производительность: StringCollection vs List <String>
Мне было интересно, когда я должен использовать List <string> и когда я должен использовать StringCollection.
Скажем, что мне приходится иметь дело с большим количеством строк (например, текстовыми файлами 10 МБ).
Я знаю, что List <T> обеспечивает более мощные функции, чем StringCollection.
Но иногда я нахожу список List <T> медленно, когда, например, сообщая Gridview, что его источник данных является List <String> ...
Знаете ли вы все плюсы и минусы этих коллекций, касающиеся скорости и веса в памяти?
Что касается их функциональности, я уверен, что все согласятся сказать, что List является лучшим, поэтому мой вопрос не в этом. Рассмотрим вопрос о проектах в Frameworks 4.0, поэтому оба могут быть использованы.
Ответы
Ответ 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
.