.NET queue ElementAt performance

У меня проблемы с частями моего кода:

    private void UpdateOutputBuffer()
    {
        T[] OutputField = new T[DisplayedLength];

        int temp = 0;
        int Count = HistoryQueue.Count;
        int Sample = 0;

        //Then fill the useful part with samples from the queue
        for (temp = DisplayStart; temp != DisplayStart + DisplayedLength && temp < Count; temp++)
        {
            OutputField[Sample++] = HistoryQueue.ElementAt(Count - temp - 1);
        }

        DisplayedHistory = OutputField;
    }

Это занимает большую часть времени в программе. Количество элементов в HistoryQueue - 200 тыс. +. Может ли это быть из-за того, что очередь в .NET реализована внутри как связанный список?

Что было бы лучше сделать это? По сути, класс должен действовать как FIFO, который начинает отбрасывать элементы при ~ 500 тыс. образцов, и я мог выбрать элементы DisplayedLength и поместить их в OutputField. Я подумывал написать свою собственную очередь, в которой использовался бы кольцевой буфер.

Код отлично работал для подсчета более низких значений. DisplayedLength - 500.

Спасибо,

Дэвид

5
задан daqq 10 January 2011 в 09:24
поделиться