6 Stimmen

Wann sollte ein Array() über Generic.Lists in .NET verwendet werden?

Wann ist es angemessen, ein Array über eine generische Liste (von T) in .NET zu verwenden?

Ich habe mich schwer getan, einen Vorteil eines Arrays gegenüber der generischen Liste zu erkennen, aber ich habe das Gefühl, dass ich vielleicht etwas übersehe. Leistung ist eine Sache, die mir als ein potenzieller Engpass aufgefallen ist?

Gracias

3voto

Garry Shutler Punkte 31414

Wenn Sie eine feste Anzahl von Objekten eines bestimmten Typs verwenden, macht es keinen Sinn, den kleinen Leistungsabfall in Kauf zu nehmen, der mit der Klasse List verbunden ist, da Sie keine ihrer Funktionen nutzen werden.

3voto

Tamas Czinege Punkte 114595

Ich kopiere jetzt schamlos meine bearbeitete Antwort für eine eine sehr ähnliche Frage wurde heute hier gestellt :

Ich möchte darauf hinweisen, dass während Arrays eine Kovarianz haben, generische Listen nicht. Zum Beispiel, ein Array vom Typ MyChildClass[] kann leicht sein gegossen werden, um MyParentClass[] , während List<MyChildClass> kann nicht gewirkt werden auf List<MyParentClass> Zumindest nicht direkt.

Wenn Sie die Kovarianz benötigen, verwenden Sie entweder Arrays, verwenden Sie die Cast()-Methode von LINQ oder ein anderes Mittel, um jedes Element einzeln.

2voto

bmotmans Punkte 15480

Ein weiterer Grund, reguläre Arrays zu verwenden, ist die Arbeit mit Plattformaufrufen (Ausführen von nicht verwaltetem C/C++-Code), aber dies ist auf eine sehr kleine Gruppe von Anwendungen beschränkt

Noch eine Anmerkung: Wenn die Größe des Arrays bekannt ist, Sie aber trotzdem eine generische Liste verwenden wollen, vergessen Sie nicht, die Größe an den Kapazitätsparameter des Konstruktors zu übergeben.

zum Beispiel:

List<int> lst = new List<int> (100);

Andernfalls beginnt die Liste mit einer sehr geringen Kapazität und muss mehrmals neue Speicherabschnitte zuweisen, anstatt den erforderlichen Speicherplatz auf einmal zuzuweisen.

0voto

Nir Punkte 28685

Viele der höheren Datenstrukturen (einschließlich List) verwenden intern Arrays, da dies die einzige Möglichkeit ist, eine Rohsequenz im Speicher zu speichern - Arrays müssen also in der Programmiersprache vorhanden sein, sonst gäbe es keine höheren Datenstrukturen.

Meiner Meinung nach sollten Sie niemals Arrays verwenden, es sei denn, Sie müssen es (z. B. weil Sie eine Komponente verwenden, die es erfordert) - insbesondere schreiben Sie keinen Code, der Arrays zurückgibt oder Arrays als Parameter akzeptiert, damit Sie andere nicht zwingen, ebenfalls Arrays zu verwenden.

Die einzige Ausnahme (meiner Meinung nach) ist der seltene Fall, dass Sie eine Sammlung von einer bekannten festen Größe als lokale Variable benötigen, dann scheint es einfach verschwenderisch, etwas anderes zu verwenden.

0voto

Wenn Sie eine feste Anzahl von Daten zwischenspeichern möchten, verwenden Sie Arrays. Andernfalls verwenden Sie generische Listen ... sie sind einfach einfacher zu bedienen, bieten mehr Flexibilität und sind typisiert (keine Notwendigkeit für Boxing/Unboxing) ... so einfach ist das. Außerdem hat ein Array eine feste Länge, während Listen variabel sind und sich nach Belieben ändern können. Die Gründe für die Verwendung einer generischen Liste im Vergleich zu einem Array lassen sich endlos fortsetzen. Arrays sind einfach nur nervig. Und ehrlich gesagt, über den Leistungsvorteil einer Liste im Vergleich zu einem Array kann man wahrscheinlich bis ins Unendliche diskutieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X