estoy teniendo un tiempo duro con partes de mi código:cola de .NET rendimiento ElementAt
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;
}
Se necesita la mayor parte del tiempo en el programa. La cantidad de elementos en HistoryQueue es de 200k +. ¿Podría ser porque la cola en .NET se implementa internamente como una lista vinculada?
¿Cuál sería una mejor forma de solucionar esto? Básicamente, la clase debería actuar como un FIFO que comienza a soltar elementos a ~ 500k muestras y podría elegir elementos DisplayLong y ponerlos en OutputField. Estaba pensando en escribir mi propia Cola que usaría un buffer circular.
El código funcionó bien para contar valores más bajos. DisplayedLength es 500.
Gracias,
David
Parece que retrocede en la cola, no hacia adelante. Pero sí, estoy de acuerdo. Si va a hacer algo en secuencia, debe usar un iterador o algo con O (1) acceso de indexación. –