Если вы работаете со строками в 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 процентов.