Maison >développement back-end >C++ >Comment puis-je créer efficacement des tranches de tableau en C# sans copier de données ?

Comment puis-je créer efficacement des tranches de tableau en C# sans copier de données ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-14 20:12:42310parcourir

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

Sous-ensembles de tableau C# : gestion efficace des portions de tableau

Les tableaux C#, stockant des éléments d'un seul type de données dans une mémoire contiguë, nécessitent souvent de travailler avec des parties spécifiques sans altérer l'original. Ceci est particulièrement pertinent lorsqu'il s'agit de tableaux étendus, comme dans la communication réseau (par exemple, recevoir un nombre défini d'octets à partir d'un socket). Bien que le découpage direct des tableaux ne soit pas intégré comme dans certains langages, ArraySegment<T> fournit une solution très efficace.

Le défi :

Imaginez un grand tableau d'octets :

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

La tâche consiste à extraire les x octets initiaux sans créer de tableau en double ou de IEnumerable<byte> collection.

La ArraySegment<T> Solution :

Au lieu d'un découpage explicite, C# exploite ArraySegment<T> :

<code class="language-csharp">string[] a = { "one", "two", "three", "four", "five" };
var segment = new ArraySegment<string>(a, 1, 2);</code>

ArraySegment<T> agit comme un wrapper léger, référençant une partie d'un tableau existant sans duplication de données.

Compréhension ArraySegment<T> :

Le constructeur ArraySegment<T> prend trois arguments :

  1. Le tableau source.
  2. L'indice de départ (base zéro).
  3. La longueur du sous-ensemble.

Dans l'exemple, segment pointe vers "deux" et "trois" dans le tableau a.

Avantages de ArraySegment<T> :

  • Optimisation de la mémoire :Évite la copie inutile de tableaux, cruciale pour les grands ensembles de données.
  • Gains de performances : L'accès aux éléments via ArraySegment<T> est plus rapide que la création de nouveaux tableaux.
  • Compatibilité LINQ : Intégration transparente avec LINQ pour filtrer et manipuler le sous-ensemble du tableau.

En résumé :

ArraySegment<T> propose une approche rationalisée et efficace pour travailler avec des sous-ensembles de tableaux en C#. Il améliore les performances et réduit la consommation de mémoire, ce qui le rend idéal pour les scénarios impliquant de grandes baies et des opérations réseau.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn