С#,.NET4.
У нас есть критический код производительности, который вызывает некоторые проблемы. Это своего рода измененная очередь, которая на самом деле поддерживается списком. Мне было интересно, как дорого стоит элемент с индексом 0. Вопросы, которые приходят на ум, следующие:
- В зависимости от того, как поддерживается резервная копия, выполняются ли какие-либо выделения/освобождения памяти после удаления в RemoveAt() для компенсации нового размера списка? Я знаю, например, что изменение размера массива может быть дорогостоящим (относительно говоря).
- Я всегда представлял себе, что списки ведут себя как связанные списки, так что удаление элемента в нулевой позиции означает просто наличие ссылки на начало списка, скорректированную с предыдущего нулевого элемента на то, что раньше было первым (но теперь является первым элементом). Но мое "воображение" и реальность не всегда в строю.
Я всегда предполагал, что RemovedAt был O (1) для списков. Это тот случай?