Сравнение общего списка с массивом - PullRequest
2 голосов
/ 06 ноября 2008

Почему generic.list медленнее массива?

Ответы [ 2 ]

5 голосов
/ 06 ноября 2008

Общий список немного медленнее массива, но не так, как вы заметили бы в большинстве случаев. В основном это связано с тем, что поиск немного сложнее: говорят, что List использует массив «под капотом», но не гарантируется, что узлы в смежной памяти будут храниться так же, как в массиве.

Тем не менее, я видел некоторые тесты еще в 2005 году (сейчас не могу найти ссылку), и разница составляет очень мало.

Кроме того, список имеет ряд важных преимуществ перед массивом: главным образом, добавление или удаление элементов тривиально. Гораздо проще использовать список, когда вы не знаете, сколько предметов вам понадобится, или когда это число будет меняться. В этих случаях (и, честно говоря, это большую часть времени ), вам, вероятно, следует не использовать массив.

2 голосов
/ 07 ноября 2008

С точки зрения производительности чтения, есть два фактора:

  • дополнительная разыменование (т. Е. List<T> будет содержать поле T[] и должно отменять ссылку на него)
  • он не может использовать некоторые оптимизации компилятора, которые существуют для T[] - такие как устранение проверки границ во время циклов

Тем не менее, гораздо проще добавить к List<T>, в частности, потому что он сохраняет свободное пространство - то есть ему не нужно изменять размер / блитировать весь массив только для добавления одного элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...