Substrings vs. Spans: manipulação eficiente de strings em C#
Se você estiver trabalhando com strings em C#, provavelmente já encontrou a necessidade de extrair substrings ou manipular partes de uma string. Tradicionalmente, você usaria o Substringmétodo para extrair uma parte de uma string, mas há uma alternativa mais recente chamada "spans" que você pode querer considerar.
Neste artigo, veremos as diferenças entre substrings e spans em C# e discutiremos como você pode usar cada abordagem com eficiência para lidar com strings em seu código.
O que são Substrings?
Uma substring é uma parte de uma string que você extrai usando o Substringmétodo em C#.
Aqui está um exemplo de como você extrairia uma substring de uma string em C#:
string originalString = "The quick brown fox jumps over the lazy dog";
string substring = originalString.Substring(4, 5); // == quick
O que são Spans?
Spans são uma alternativa mais recente para substrings em C#. Eles fornecem uma maneira mais eficiente de manipular strings.
Um span é essencialmente uma “visualização” de uma parte de uma matriz ou string maior, sem realmente criar uma nova instância dessa parte. Isso significa que você pode manipular os dados no intervalo sem afetar os dados originais.
Aqui está um exemplo de como você criaria um span em C#:
string originalString = "The quick brown fox jumps over the lazy dog";
ReadOnlySpan<char> span = originalString.AsSpan(4, 5); // == quick
Benefício do uso de spans
Como os spans são essencialmente “visualizações” de uma parte de uma matriz ou string maior, eles não criam novas instâncias desses dados. Isso significa que usar spans pode ser muito mais eficiente do que usar substrings, especialmente ao lidar com strings grandes.
Quando usar substrings versus spans
Embora os spans sejam geralmente mais eficientes do que as substrings, ainda existem alguns casos em que as substrings podem ser mais apropriadas. Por exemplo, se você estiver trabalhando com uma string pequena ou precisar apenas extrair uma única substring, os benefícios de desempenho do uso de spans podem não ser significativos o suficiente para justificar a complexidade adicional.
Comparação de exemplo do mundo real
Eu criei um aplicativo de console de benchmark de exemplo, que você pode executar para seu próprio conhecimento . Abaixo você pode ver um exemplo de resultado do benchmark.
Você pode ver que o método ReplaceSpan é aproximadamente 23% mais rápido. Além disso, a memória alocada é mais de 50% menor.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)