Если вы работаете со строками в C#, вы, вероятно, сталкивались с необходимостью извлечения подстрок или манипулирования частями строки. Традиционно вы использовали бы метод Substring для извлечения части строки, но есть более новая альтернатива, называемая «spans», которую вы, возможно, захотите рассмотреть.

В этой статье мы рассмотрим различия между подстроками и интервалами в C# и обсудим, как можно эффективно использовать каждый подход для обработки строк в коде.

Что такое подстроки?

Подстрока — это часть строки, извлекаемая с помощью метода Substring в C#.

Вот пример извлечения подстроки из строки в C#:

string originalString = "The quick brown fox jumps over the lazy dog";
string substring = originalString.Substring(4, 5); // == quick

В этом примере мы извлекаем подстроку, начинающуюся с индекса 4, и длиной 5 символов. Результирующая переменная substring будет содержать текст «быстро».

Что такое спаны?

Промежутки — это более новая альтернатива подстрокам в C#. Они обеспечивают более эффективный способ манипулирования строками.

Диапазон — это, по сути, «представление» части большего массива или строки без фактического создания нового экземпляра этой части. Это означает, что вы можете манипулировать данными в диапазоне, не затрагивая исходные данные.

Вот пример того, как вы могли бы создать диапазон в C#:

string originalString = "The quick brown fox jumps over the lazy dog";
ReadOnlySpan<char> span = originalString.AsSpan(4, 5); // == quick

В этом примере мы создаем диапазон только для чтения, который начинается с индекса 4 и имеет длину 5 символов. Результирующая переменная span будет содержать тот же текст (быстрый), что и переменная substring из предыдущего примера.

Преимущество использования промежутков

Поскольку промежутки — это, по сути, «представления» части большего массива или строки, они не создают новых экземпляров этих данных. Это означает, что использование диапазонов может быть намного более эффективным, чем использование подстрок, особенно при работе с большими строками.

Когда использовать подстроки против промежутков

Хотя интервалы обычно более эффективны, чем подстроки, все же есть случаи, когда подстроки могут быть более подходящими. Например, если вы работаете с небольшой строкой или вам нужно извлечь только одну подстроку, выигрыш в производительности от использования интервалов может быть недостаточно значительным, чтобы оправдать дополнительную сложность.

Сравнение с реальным миром

Я создал пример тестового консольного приложения, которое вы можете запустить для собственного ознакомления. Ниже вы можете увидеть пример результата теста.

Вы можете видеть, что метод ReplaceSpan примерно на 40% быстрее. При этом выделенной памяти стало меньше более чем на 50 процентов.