Да, проблема связанного списка почти наверняка является проблемой.Есть причина, по которой Queue<T>
не реализует IList<T>
:) (Сказав это, я считаю, Stack<T>
реализован с использованием массива, и это все еще не реализует IList<T>
. Он может обеспечить эффективный произвольный доступ, но это не так.)
Я не могу легко определить, какую часть очереди вы пытаетесь отобразить, но я сильно подозреваю, что вы могли бы упростить метод и сделайте его более эффективным, используя что-то вроде:
T[] outputField = HistoryQueue.Skip(...) /* adjust to suit requirements... */
.Take(DisplayedLength)
.Reverse()
.ToArray();
По-прежнему придется пропускать огромное количество предметов по отдельности, но, по крайней мере, это придется делать только один раз.
Думал ли ты об использовании LinkedList<T>
напрямую?Это значительно упростило бы чтение элементов из конца списка.
Построение собственной ограниченной очереди с использованием кольцевого буфера, разумеется, не будет трудным и может быть лучшим решением.в долгосрочной перспективе.