![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Pankon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Какой вариант работает быстрее?
1
2
|
||||
|
|||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
2 вариант быстрее.
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Первый быстрее. Во втором варианте юзается сцепка двух обычных строк, а результат цепляется в StringBuilder. В первом варианте строки цепляются в StringBuilder напрямую. Для обычного StringBuilder-а эта операция занимает почти нулевое время т.к. работа идёт с уже выделенным буфером под строку; обычная же сцепка двух строк приводит к созданию третьей строки - лишний оверхед.
-------------------- ![]() |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Значится так: Почти всегда, второй вариант медленнее, первого. На маленьких словах они почти рядом. Чем больше длинна слова, тем второй больше отрывается от первого (останавливается при достижении почти 2-х кратного преимущества). Если из конструктора убрать начальную "мощность" builder-a, то разница сокращается, но все равно первый медленнее |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
ivashkanet, а какой результат если убрать из конструктора размер буфера т.е не
sbBuff = new StringBuilder(2 * wordsLength); а sbBuff = new StringBuilder(); ПС В своей проге я не знаю конечный размер строки... |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
![]() http://msdn.microsoft.com/library/default..../vbnstrcatn.asp Добавлено @ 16:41 http://www.heikniemi.net/hc/archives/000124.html Добавлено @ 16:42 При количестве итераций < 10 эффекта вообще ноль, кстати. |
|||
|
||||
| DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: нет Всего: 8 |
Там вообщем о capacity? Поправьте если я ошибаюсь. Помнится мне что это стартовое количество элементов, если его не назначить то у него там в конструкторе начальный есть(4 что ли?). Если ты задашь capacity в размер строки, то он не будет переопределять массив, в который он кидает значения. Если буфер уже заполнен то он будет переопределять размер массива, а на это тоже уходит время. |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Pankon, возьми и сравни.
P.S. Принцип работы такой: Есть билдер мощности 100, например. В нем занято 50 под строку. Остальные --- пустые, в резерве. Если мы не перевалим через 100, то новые строки будут добавляться прямо в зарезервированное пространство билдера. Как только нам не будет хватать нашей сотни, размер билдера увеличится в 2 раза (станет 200) и т.д. Выигрыш в том, что мы пытаемся как можно сократить количество выделений памяти под новую стоку. Что тянет прилично времени. Если использовать простые строки, то выделение памяти под строку будет производиться при каждом изменении строки. Как уже сказал DarkDragon, начальное значение мощности -- 4, но можно его задать самостоятельно. Если ты не знаешь нужного тебе размера, то можно его прикинуть, зная что каждая неиспользованная "ячейка" тянет 4 байта и перевыделение идет двухкратными скачками. |
|||
|
||||
| Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
Если компилятор не тупой (а он не тупой), то
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Djuffin, это просто пример, который показывает разные концепции составления строк
|
|||
|
||||
| DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: нет Всего: 8 |
||||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Оно-то, конечно , прикольно, но, ИМХО, никто в здравом уме такое не напишет |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Я говорю лишь о том, что компилятор, естественно, оптимизирует енто (тут сомневались):
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |