首頁 >後端開發 >C++ >C# 如何在不複製資料的情況下有效率地建立數組切片?

C# 如何在不複製資料的情況下有效率地建立數組切片?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-14 20:12:42310瀏覽

How Can I Efficiently Create Array Slices in C# Without Copying Data?

C# 數組子集:高效處理數組部分

C# 陣列將單一資料類型的元素儲存在連續記憶體中,通常需要在不改變原始資料的情況下處理特定部分。 這在處理大量數組時尤其重要,例如在網路通訊中(例如,從套接字接收一定數量的位元組)。 雖然直接數組切片不像某些語言那樣內置,但 ArraySegment<T> 提供了一種高效的解決方案。

挑戰:

想像一個大位元組數組:

<code class="language-csharp">byte[] foo = new byte[4096];</code>

任務是提取初始的 x 位元組,而不建立重複的陣列或 IEnumerable<byte> 集合。

ArraySegment<T>解:

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> 充當輕量級包裝器,引用現有數組的一部分,而無需重複資料。

理解ArraySegment<T>

ArraySegment<T> 建構子採用三個參數:

  1. 來源數組。
  2. 起始索引(從零開始)。
  3. 子集的長度。

在範例中,segment 指向陣列 a 中的「二」和「三」。

ArraySegment<T>的優點:

  • 記憶體最佳化:避免不必要的陣列複製,這對於大型資料集至關重要。
  • 效能提升:透過 ArraySegment<T> 存取元素比建立新陣列更快。
  • LINQ 相容性: 與 LINQ 無縫集成,用於過濾和操作數組子集。

總結:

ArraySegment<T> 提供了一種在 C# 中處理數組子集的簡化且高效的方法。 它增強了效能並減少了記憶體消耗,非常適合涉及大型數組和網路操作的場景。

以上是C# 如何在不複製資料的情況下有效率地建立數組切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn