Sottostringhe e span: gestione efficiente delle stringhe in C#
Se stai lavorando con le stringhe in C#, probabilmente hai riscontrato la necessità di estrarre sottostringhe o manipolare parti di una stringa. Tradizionalmente, useresti il Substringmetodo per estrarre una parte di una stringa, ma c'è un'alternativa più recente chiamata "spans" che potresti prendere in considerazione.
In questo articolo, daremo un'occhiata alle differenze tra sottostringhe e estensioni in C# e discuteremo come usare ogni approccio in modo efficiente per gestire le stringhe nel codice.
Cosa sono le sottostringhe?
Una sottostringa è una parte di una stringa estratta usando il Substringmetodo in C#.
Ecco un esempio di come estrarre una sottostringa da una stringa in C#:
string originalString = "The quick brown fox jumps over the lazy dog";
string substring = originalString.Substring(4, 5); // == quick
Cosa sono gli Span?
Gli span sono un'alternativa più recente alle sottostringhe in C#. Forniscono un modo più efficiente per manipolare le stringhe.
Uno span è essenzialmente una "visualizzazione" di una porzione di un array o di una stringa più grande, senza creare effettivamente una nuova istanza di quella porzione. Ciò significa che è possibile manipolare i dati nello span senza influire sui dati originali.
Ecco un esempio di come creeresti uno span in C#:
string originalString = "The quick brown fox jumps over the lazy dog";
ReadOnlySpan<char> span = originalString.AsSpan(4, 5); // == quick
Vantaggio dell'uso degli span
Poiché gli intervalli sono essenzialmente "viste" di una porzione di un array o di una stringa più grande, non creano nuove istanze di quei dati. Ciò significa che l'utilizzo di intervalli può essere molto più efficiente rispetto all'utilizzo di sottostringhe, soprattutto quando si tratta di stringhe di grandi dimensioni.
Quando utilizzare le sottostringhe rispetto agli span
Sebbene gli intervalli siano generalmente più efficienti delle sottostringhe, ci sono ancora alcuni casi in cui le sottostringhe potrebbero essere più appropriate. Ad esempio, se stai lavorando con una piccola stringa o hai solo bisogno di estrarre una singola sottostringa, i vantaggi in termini di prestazioni dell'utilizzo degli intervalli potrebbero non essere abbastanza significativi da giustificare la complessità aggiuntiva.
Confronto di esempi del mondo reale
Ho creato un'applicazione console di riferimento di esempio, che puoi eseguire per tua conoscenza . Di seguito puoi vedere un esempio di risultato del benchmark.
Puoi vedere che il metodo ReplaceSpan è circa il 23% più veloce. Inoltre, la memoria allocata è inferiore di oltre il 50%.

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































