Welche Bedeutung hat die Einstellung der IList-Kapazität?

7

Was ist wichtig, eine Listenkapazität beim Erstellen festzulegen?

Sagen Sie zum Beispiel, ich weiß sicher, dass meine Liste während ihrer Lebensdauer nur n Elemente enthält.

    
gcso 30.09.2011, 12:36
quelle

4 Antworten

14

Innerhalb von List<T> gibt es eine Sammlung mit statischer Größe, in der sich Ihre Artikel befinden. Sobald Sie die Kapazität dieser Sammlung erreicht haben, wird die Größe von List<T> angepasst. Dies ist ein Leistungseinbruch (möglicherweise für Sie von Bedeutung).

Wenn Sie die Anfangskapazität einstellen, vermeiden Sie, dass Sie diese Größenanpassung durchführen müssen.

    
Justin Niessner 30.09.2011, 12:38
quelle
7

Immer wenn eine Liste ihre aktuelle Kapazität überschreiten muss, müssen Speicherzuweisungen und das Verschieben von Daten erfolgen, was Zeit und Aufwand erfordert.

Wenn Sie im Voraus genau wissen, wie groß die Liste sein wird, können Sie das vermeiden.

    
Andrew Barber 30.09.2011 12:38
quelle
3

Sie werden ein wenig beschleunigen, weil die Liste nicht vergrößert werden muss. Das Erweitern einer Liste ist O (n), wobei n die aktuelle Anzahl der Elemente ist und der Standard List<> durch Verdoppeln der aktuellen Größe wächst. Alles in allem ist das Hinzufügen eines Elements am Ende einer Liste immer noch im Durchschnitt eine O (1) -Operation (weil am Ende n Elemente eingefügt werden, haben Sie im Durchschnitt n Inserts bis zum Ende (jeweils ein O (1)) ) Operation) und n kopieren Operationen zwischen alten Puffer und neueren Puffer (jeweils eine O (1) -Operation), so dass jede add auf O (1))

ist     
xanatos 30.09.2011 12:39
quelle
3

Dadurch wird die Leistung leicht verbessert, da der erforderliche Speicher beim Erstellen der Liste zugewiesen wird und die CLR die Listengröße beim Hinzufügen weiterer Elemente nicht erhöhen muss.

Beachten Sie, dass selbst wenn Sie eine Listengröße angeben, diese trotzdem erhöht wird, wenn Sie mehr Elemente als erwartet hinzufügen.

    
Jean-François 30.09.2011 12:40
quelle

Tags und Links