![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
davandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 25.10.2005 Где: Украина, Харьков Репутация: нет Всего: нет |
Привет!
Вопрос по производительности. На загрузке страницы у меня происходит генерация большого html-кода. То что создавать серверные контролы для этого не стоит - факт. Я пучкми генерю нужную мне строку (string myHtmlString), а потом в нужном месте страницы делаю серверную подстановку переменной. Вот так: <%=myHtmlString %> Хочу услышать Ваше мнение. Может можно еще что-то "ускорить"? |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
davandr, можно попробовать настроить кэширование.
|
|||
|
||||
davandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 25.10.2005 Где: Украина, Харьков Репутация: нет Всего: нет |
Ну, суть-то не в этом. Раз уж на то пошло - можно сделать свой контрол, туда ручками, как это я сейчас делаю, вывести весь html, а потом уже играться с кэшированием.
![]() Меня интересует вопрос наиболее быстрого выворда html. |
|||
|
||||
Zakonnic |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 25.4.2006 Репутация: 3 Всего: 6 |
Вообще лучше использовать Responce.Write, так как склейка больших строк может быть медленной. На худой конец StringBuilder.
Если не нужны серверные контролы, то можно написать хендлер для такого дела, это чуть быстрее, чем обычные страницы. И кстати, не проводились ли какие измерения, сколько времени занимает генерация такой страницы с серверными контролами и вручную? А то не совсем понятно, ради чего все извращения. --------------------
...и никогда не пишите в комментариях правду |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Насчет измерений не в курсе, но я на 100% уверен, что игра не стоит свеч. В Web-приложениях на фоне времени загрузки страницы задержка даже в одну десятую секунды не будет замечена пользователем. |
|||
|
||||
tolik_p |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 30.6.2007 Где: Брянск Репутация: 1 Всего: 1 |
Если к этой странице одновременно обратятся 50 пользователей, то уже будет задержка на 5сек. Но это должен быть очень популярный проект. |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 7 Всего: 49 |
tolik_p, с чего ты вообще взял что серверные контролы будут работать медленее? Они точно так же генерят html, и пишут его в Response, скорее всего даже быстрее, чем ты это делаешь вручную. А ты занимаешься бесполезной преждевременной оптимизацией.
|
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Сами-то они, конечно, ничего не пишут: они просто возвращают html при вызове WebControl.Render(). Ну а медленнее они, чем строки, из-за того, что им приходится проходить весь жизненный цикл. Однако строка контролов наверняка формируется путем прохода цикла/циклов и конкатенации строк наподобие srt += "<tr><td>Hello, Vingrad!</td></tr>. А конкатенированная строка - это новый объект, под который нужно выделять память. davandr, действительно, судя по всему, игра не стоит свеч. И в том, и в другом методе есть свои издержки... так что лучше использовать более удобный метод. Да и для оптимизации все-таки существуют гораздо более эффективные методы.... |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 7 Всего: 49 |
WebControl.Render принимает параметром HtmlTextWriter, в который контролы напрямую пишут, только на чуть более высоком уровне. Т.е. там нет конкатенации, прямо в респонс стрим пишется сначала "<td>", потом "<td>", потом контент, потом закрывающие тэги. К моменту записи последних первые тэги уже могут уйти к клиенту. Asp.net не собирает весь html в одну большую мегастроку, он вообще со строками на уровне html не работает. тупо конвертит их в байты по мере поступления и отдает клиенту. А расходы на стандартный жизненный цикл просто ничто по сравнению с расходами на ручную организацию своего жизненного цикла, собирания мегапеременной myHtmlString, расходов памяти на самописную работу с html. Вообще ситуация напоминает "Стандартный болид F1 мы сочли слишком медленным. У него же крылья торчат, всем понятно что ими махать тяжело - это факт. Поэтому мы сделали свою собственную телегу. Скажите, какие лучше сделать - шестиугольные или квадратные колеса?". Это сообщение отредактировал(а) PashaPash - 19.6.2008, 15:10 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |