У меня проблемы с частями моего кода:
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.
Спасибо,
Дэвид