popping Ich habe mich gefragt, welche Implementierung würde eine bessere Leistung haben:Performance: die schneller Rückwärts auf einem Stapel Aufruf oder Elemente in einem Array
Ich brauche alle Elemente aus einem Stapel löschen mit Ausnahme der ersten 10 an der Spitze .
Diese 10 müssen dann in ihrer ursprünglichen Reihenfolge in den Stapel gelegt werden.
Ich dachte, von 2 nähert sich
die erste:
FilterRecord[] records = new FilterRecord[10];
for (int i = 0; i < records.Length; i++)
{
records[i] = _InternalCollection.Pop();
}
_InternalCollection.Clear();
for (int i = records.Length - 1; i >= 0; i--)
{
_InternalCollection.Push(records[i]);
}
Die zweite:
int count = _InternalCollection.Count - 10;
_InternalCollection.Reverse();
for (int i = 0; i < count; i++)
{
_InternalCollection.Pop();
}
_InternalCollection.Reverse();
Jede Hilfe oder Richtlinien oder andere impemenations wäre willkommen.
Klingt wie eine Gelegenheit für Sie, ein Benchmarking zu machen. Für Ihr gegebenes Beispiel ist der Unterschied wahrscheinlich in der realen Welt sowieso vernachlässigbar. –
Ja, ich war faul, dachte, ich könnte sofort eine Antwort bekommen, vielleicht durch irgendjemanden, der etwas offensichtlich offensichtlich falsch in beiden Ansatz aufzeigt. – AndyMM
Die zweite Methode funktioniert nicht wie vorgesehen. Die Klasse Stack hat keine Reverse-Methode. Es ist eine Erweiterungsmethode für IEnumerable , so dass es den Stack überhaupt nicht beeinflussen würde. Ein Leistungstest würde zeigen, dass es sehr schnell ist, aber das liegt daran, dass die Aufrufe von Reverse keine wirkliche Arbeit machen. –
Guffa