Sto avendo un momento difficile con le parti del mio codice:coda .NET prestazioni 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;
}
Ci vuole maggior parte del tempo nel programma. Il numero di elementi in HistoryQueue è 200k +. Ciò potrebbe essere dovuto al fatto che la coda in .NET è implementata internamente come elenco collegato?
Quale sarebbe un modo migliore di fare questo? Fondamentalmente, la classe dovrebbe comportarsi come una FIFO che inizia a rilasciare elementi a ~ 500k di campioni e potrei scegliere gli elementi di DisplayedLength e inserirli in OutputField. Stavo pensando di scrivere la mia coda che userebbe un buffer circolare.
Il codice ha funzionato correttamente per contare i valori più bassi. DisplayedLength è 500.
Grazie,
David
Sembra che stia andando all'indietro attraverso la coda, non in avanti. Ma sì, sono d'accordo. Se stai andando a fare qualcosa in sequenza, dovresti usare un iteratore o qualcosa con accesso di indicizzazione O (1). –