C#-Array-Teilmengen: Array-Teile effizient verarbeiten
C#-Arrays, die Elemente eines einzelnen Datentyps im zusammenhängenden Speicher speichern, erfordern oft die Arbeit mit bestimmten Teilen, ohne das Original zu verändern. Dies ist besonders relevant, wenn es um umfangreiche Arrays geht, wie bei der Netzwerkkommunikation (z. B. Empfang einer festgelegten Anzahl von Bytes von einem Socket). Während das direkte Array-Slicing nicht wie in einigen Sprachen integriert ist, bietet ArraySegment<T>
eine äußerst effiziente Lösung.
Die Herausforderung:
Stellen Sie sich ein großes Byte-Array vor:
<code class="language-csharp">byte[] foo = new byte[4096];</code>
Die Aufgabe besteht darin, die anfänglichen x
Bytes zu extrahieren, ohne ein doppeltes Array oder eine IEnumerable<byte>
Sammlung zu erstellen.
Die ArraySegment<T>
Lösung:
Anstelle des expliziten Slicings nutzt C# ArraySegment<T>
:
<code class="language-csharp">string[] a = { "one", "two", "three", "four", "five" }; var segment = new ArraySegment<string>(a, 1, 2);</code>
ArraySegment<T>
fungiert als leichter Wrapper und verweist auf einen Teil eines vorhandenen Arrays ohne Datenduplizierung.
Verstehen ArraySegment<T>
:
Der ArraySegment<T>
-Konstruktor benötigt drei Argumente:
Im Beispiel zeigt segment
auf „zwei“ und „drei“ innerhalb des Arrays a
.
Vorteile von ArraySegment<T>
:
ArraySegment<T>
ist schneller als das Erstellen neuer Arrays.Zusammenfassung:
ArraySegment<T>
bietet einen optimierten und effizienten Ansatz für die Arbeit mit Array-Teilmengen in C#. Es steigert die Leistung und reduziert den Speicherverbrauch, was es ideal für Szenarien mit großen Arrays und Netzwerkoperationen macht.
Das obige ist der detaillierte Inhalt vonWie kann ich Array-Slices in C# effizient erstellen, ohne Daten zu kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!