ホームページ > バックエンド開発 > C++ > データをコピーせずに C# で配列スライスを効率的に作成するにはどうすればよいですか?

データをコピーせずに C# で配列スライスを効率的に作成するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-14 20:12:42
オリジナル
343 人が閲覧しました

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

C# 配列サブセット: 配列部分の効率的な処理

単一のデータ型の要素を連続したメモリに格納する C# 配列では、多くの場合、元のデータを変更せずに特定の部分を操作する必要があります。 これは、ネットワーク通信 (ソケットから設定されたバイト数を受信する場合など) のように、大規模な配列を扱う場合に特に関係します。 一部の言語のように配列の直接スライスは組み込まれていませんが、ArraySegment<T> は非常に効率的なソリューションを提供します。

課題:

大きなバイト配列を想像してください:

1

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

ログイン後にコピー

タスクは、重複した配列や x コレクションを作成せずに、最初の IEnumerable<byte> バイトを抽出することです。

ArraySegment<T> 解決策:

明示的なスライスの代わりに、C# は ArraySegment<T>:

を利用します。

1

2

<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> コンストラクターは 3 つの引数を取ります。

  1. ソース配列。
  2. 開始インデックス (ゼロベース)。
  3. サブセットの長さ。

この例では、segment は配列 a 内の "two" と "three" を指します。

ArraySegment<T>の利点:

  • メモリの最適化: 大規模なデータセットにとって重要な、不必要な配列のコピーを回避します。
  • パフォーマンスの向上: ArraySegment<T> 経由で要素にアクセスする方が、新しい配列を作成するよりも高速です。
  • LINQ 互換性: 配列サブセットのフィルタリングと操作のための LINQ とのシームレスな統合。

要約:

ArraySegment<T> は、C# で配列のサブセットを操作するための合理的かつ効率的なアプローチを提供します。 パフォーマンスが向上し、メモリ消費が削減されるため、大規模なアレイやネットワーク操作を伴うシナリオに最適です。

以上がデータをコピーせずに C# で配列スライスを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート