Ниже быстрый код, который я мог бы создать для реверсирования строкиУскоренный способ обратной строки?
public static void ReverseFast(string x)
{
string text = x;
StringBuilder reverse = new StringBuilder();
for (int i = text.Length - 1; i >= 0; i--)
{
reverse.Append(text[i]);
}
Console.WriteLine(reverse);
}
Я хочу, чтобы охватить все узкие места в этом уравнении, чтобы сделать это как можно быстрее. Единственное, что я могу найти до сих пор, это проверка границ массива, которую я лишь частично понимаю. Есть ли вообще отключить это, как я понимаю, если вы используете .Length
, компилятор решает не проверять границы, но если вы уменьшаетесь, поскольку я нахожусь в цикле for
, он все еще выполняет проверку границы? Может ли кто-то преобразовать это, чтобы использовать указатели для меня, что бы избежать пограничной проверки, я хотел бы проверить разницу в скорости для строк в диапазоне 100 кбайт + символов.
Основываясь на комментариях и сообщениях ниже, это то, к чему я пришел.
public static void ReverseFast(string x)
{
StringBuilder reverse = new StringBuilder(x.Length);
for (int i = x.Length - 1; i >= 0; i--)
{
reverse.Append(x[i]);
}
Console.WriteLine(reverse);
}
Это решение выше, чем предлагаемый дублирующий вопрос. Этот вопрос действительно обращается к развороту в диапазоне 5000 * 26 символов +. Я все еще хотел бы проверить это, используя указатели, чтобы действительно увидеть, нет ли узкого места, особенно с таким большим количеством символов.
Это ** не ** будет вашим узким местом. Шутки в сторону. –
Инициализировать StringBuilder с правильной длиной (text.Length) - это предотвратит изменение размера буфера. – JeffRSon
Мой вопрос - это попрошайничество, чтобы исследовать альтернативы указателя в C# и критиковать мою текущую идею. – CodeCamper