Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencipta Slices Array dengan Cekap dalam C# Tanpa Menyalin Data?
Subset Tatasusunan C#: Mengendalikan Bahagian Tatasusunan Dengan Cekap
Tatasusunan C#, menyimpan elemen jenis data tunggal dalam memori bersebelahan, selalunya memerlukan kerja dengan bahagian tertentu tanpa mengubah asal. Ini amat relevan apabila berurusan dengan tatasusunan yang luas, seperti dalam komunikasi rangkaian (cth., menerima set bilangan bait daripada soket). Walaupun penghirisan tatasusunan langsung tidak terbina dalam seperti dalam sesetengah bahasa, ArraySegment<T>
menyediakan penyelesaian yang sangat cekap.
Cabaran:
Bayangkan tatasusunan bait yang besar:
<code class="language-csharp">byte[] foo = new byte[4096];</code>
Tugasnya ialah untuk mengekstrak bait x
awal tanpa membuat tatasusunan pendua atau koleksi IEnumerable<byte>
.
Penyelesaian ArraySegment<T>
:
Daripada menghiris eksplisit, C# memanfaatkan ArraySegment<T>
:
<code class="language-csharp">string[] a = { "one", "two", "three", "four", "five" }; var segment = new ArraySegment<string>(a, 1, 2);</code>
ArraySegment<T>
bertindak sebagai pembalut ringan, merujuk sebahagian tatasusunan sedia ada tanpa pertindihan data.
Pemahaman ArraySegment<T>
:
Pembina ArraySegment<T>
mengambil tiga hujah:
Dalam contoh, segment
menunjuk kepada "dua" dan "tiga" dalam tatasusunan a
.
Kelebihan ArraySegment<T>
:
ArraySegment<T>
adalah lebih pantas daripada mencipta tatasusunan baharu.Ringkasan:
ArraySegment<T>
menawarkan pendekatan yang diperkemas dan cekap untuk bekerja dengan subset tatasusunan dalam C#. Ia meningkatkan prestasi dan mengurangkan penggunaan memori, menjadikannya ideal untuk senario yang melibatkan tatasusunan besar dan operasi rangkaian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Slices Array dengan Cekap dalam C# Tanpa Menyalin Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!