Что случилось с ArrayList?

Недавно я задал вопрос на том, Так, чтобы упомянул возможное применение c# ArrayList для решения. Комментарий был сделан, то использование arraylist плохо. Я хотел бы больше об этом. Я никогда не слышал этот оператор, прежде чем о arraylists. мог кто-то приносить мне до скорости на возможных проблемах производительности с использованием arraylists

c#. .net 2

20
задан fishhead 24 July 2010 в 20:27
поделиться

5 ответов

Основная проблема с ArrayList заключается в том, что он использует object - это означает, что вы должны приводить к и от того, что вы инкапсулируете. Это пережиток времен до появления generics и, вероятно, существует только для обратной совместимости.

У вас нет той безопасности типов с ArrayList, которая есть с общим списком. Проблема производительности заключается в необходимости приведения объектов обратно к оригиналу (или неявного боксирования).

Неявное боксирование будет происходить всякий раз, когда вы используете тип значения - он будет боксирован, когда помещается в ArrayList, и разбоксирован, когда на него ссылаются.

Вопрос не только в производительности, но и в читабельности и корректности. С появлением generics этот объект устарел и нужен только в коде .NET 1.0/1.1.

37
ответ дан 29 November 2019 в 22:52
поделиться

В дополнение к проблемам производительности, это вопрос переноса ошибок из времени выполнения в время компиляции. Приведение объектов, извлекаемых из ArrayListов, должно происходить во время выполнения, и любые ошибки типа будут возникать во время выполнения. При использовании generic List<> все типы проверяются во время компиляции.

2
ответ дан 29 November 2019 в 22:52
поделиться

If you're storing a value type (int, float, double, etc - or any struct), ArrayList will cause boxing on every storage and unboxing on every element access. This can be a significant hit to performance.

In addition, there is a complete lack of type safety with ArrayList. Since everything is stored as "object", there's an extra burden on you, as a developer, to keep it safe.

In addition, if you want the behavior of storing objects, you can always use List. There is no disadvantage to this over ArrayList, and it has one large (IMO) advantage: It makes your intent (storing an untyped object) clear from the start.

ArrayList действительно существует и должен использоваться только в коде .NET 1.1. Нет никаких причин использовать его в .NET 2+.

14
ответ дан 29 November 2019 в 22:52
поделиться

ArrayList is not a generic type so it must store all items you place in it as objects. This is bad for two reasons. First, when putting value types in the ArrayList you force the compiler to box the value type into a reference type which can be costly. Second, you now have to cast everything you pull out of the array list. This is bad since you now need to make sure you know what objects are in there.

List avoids these issues since it is constructed with the proper type. For example:

List<int> ints =  new List<int>();
ints.Add(5); //no boxing
int num = ints[0]; // no casting
4
ответ дан 29 November 2019 в 22:52
поделиться

The generic List is preferred since it is generic, which provides additional type information and removes the need to box/unbox value types added to it.

3
ответ дан 29 November 2019 в 22:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: