Я задавался вопросом, есть ли какое-либо влияние на производительность, когда я выбираю добавить одну строку символов или один символ в константу.Производительность объединения строки и char
Так что я написал небольшой консоли Application: (.NET 4)
static class Program
{
const string STR = "string ";
static void Main()
{
var arr = new string[99999999];
Stopwatch timer = new Stopwatch();
Console.ReadLine();
timer.Start();
//for (uint i = 0; i < 99999999; i++)
//{
// arr[i] = STR + 'C';
//}
for (uint i = 0; i < 99999999; i++)
{
arr[i] = STR + "C";
}
timer.Stop();
Console.WriteLine(timer.ElapsedMilliseconds);
Console.ReadLine();
}
}
Вы должны прокомментировать один для цикла.
Итак, STR + "C"
занимает около 1300 мс.
Для STR + 'C'
Я еще не видел результата. Это занимает слишком много времени и, похоже, сильно беспокоит мой компьютер.
Итак, мой вопрос. Каким образом это влияние на производительность возможно? Я знаю, что массив значений 99999999 не будет встречаться очень часто в практическом использовании, но это все еще огромная разница.
Заранее благодарен!
Спасибо, отличный ответ! Даже без константы 'STR +" C "' почти в два раза быстрее добавления символа. Поэтому я буду использовать одиночные строки символов. Еще раз спасибо! – Andy
@ Энди Рад помочь. Ваши наблюдения имеют смысл, поскольку '' '' '' '' '' '' непосредственно можно конкатенировать, вместо того, чтобы сначала преобразовать 'char' в' string'. – dlev
@ Andy Это имеет смысл в сочетании с ответом Тиграна: оператор '+' заменяется компилятором C# с вызовом 'String.Concat'. Когда вы используете его со строкой, он может напрямую вызвать перегрузку, которая принимает строковые параметры. Когда вы используете его с символом, он должен вставить символ и вызвать перегрузку, которая принимает параметр Object. Операции бокса и распаковки относительно дороги, особенно когда они выполняются в замкнутом цикле. Но будьте осторожны, это микро-оптимизация на пике! –