Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Pavel Dvorkin, Вы писали:
WH> StringBuilder sb = new StringBuilder();
WH>...
WH> for (int i = 0; i < 100000; ++i)
WH> {
WH> sb.Length = 0;
WH> sb.Append(szFirstName);
WH> sb.Append(szLastName);
WH> }
WH>[/c#]
WH>0,04493758
WH>Оптимизированый вариант на C# получается на уровне С++ Ну чуть медленнее.
Проверять не буду, приму на веру. Все верно, я так и ожидал. Только одно имей в виду — StringBuilder постоянно хранит и изменяет поле длины. И это не бесплатно. Ты уже заплатил за вычисление этой длины вот здесь
string szFirstName = "11111111111111111111111111111111111111111111111111111111111111111111111111111";
string szLastName = "22222222222222222222222222222222222222222222222222222222222222222222222222222
(именно здесь, может, и нет, так как строки константые, но в других случаях — да)
Естественно, когда мы миллион раз одни и те же строки сцепляем, это не надо миллилн раз делать. А вот если строки все время разные, то вычисление их длины входит в плату за конкатенацию.
WH>Кстати для корректности теста перепиши свои на wchar_t.
А зачем ? Надо будет — перепишу. А пока мне и так хорошо — там, как я знаю, только 0-127. И незачем мне делать 50% оверхед. Я могу и не переписывать. А вот ты можешь на ASCII переписать ?