Скорость списков C#

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

30
задан tereško 12 July 2014 в 07:47
поделиться

2 ответа

List uses a backing array to hold items:

  • Indexer access (i.e. fetch/update) is O(1)
  • Remove from tail is O(1)
  • Remove from elsewhere requires existing items to be shifted up, so O(n) effectively
  • Add to end is O(1) unless it requires resizing, in which case it's O(n). (This doubles the size of the buffer, so the amortized cost is O(1).)
  • Add to elsewhere requires existing items to be shifted down, so O(n) effectively
  • Finding an item is O(n) unless it's sorted, in which case a binary search gives O(log n)

It's generally fine to use lists fairly extensively. If you know the final size when you start populating a list, it's a good idea to use the constructor which lets you specify the capacity, to avoid resizing. Beyond that: if you're concerned, break out the profiler...

81
ответ дан 27 November 2019 в 23:10
поделиться

По сравнению с чем?

  • Если вы имеете в виду List , то это, по сути, оболочка для массива; так быстро читать / писать по индексу, относительно быстро добавлять (так как это позволяет дополнительное пространство в конце, удваивая размер, когда необходимо) и удалять с конца, но дороже выполнять другие операции (вставка / delete, кроме конца)
  • Массив снова быстрый по индексу, но фиксированный размер (без добавления / удаления)
  • Dictionary <,> и т. д. предлагают лучший доступ по ключу

Список не t изначально медленный; особенно если вы знаете, что вам всегда нужно просматривать все данные или можете получить к ним доступ по индексу. Но для больших списков может быть лучше (и удобнее) искать по ключу. В .NET существуют различные реализации словарей, каждая с разной стоимостью в зависимости от размера / производительности.

12
ответ дан 27 November 2019 в 23:10
поделиться
Другие вопросы по тегам:

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