Низкая производительность - ASP .NET ASPNET_WP.EXE и CSC.EXE запускаются после нажатия на ссылку перенаправления - PullRequest
3 голосов
/ 05 марта 2010

Я нажимаю на ссылку с одной страницы, которая выполняет перенаправление на другую страницу (Response.Redirect (page.aspx)).

Браузер взбалтывает около 30 секунд, и отображается страница. Я пытаюсь выяснить, почему загрузка страницы занимает так много времени.

На странице размещены два других пользовательских элемента управления.

Я закомментировал строки кода для каждого и обоих элементов управления, и загрузка страницы все еще занимает около 30 секунд.

Я установил точки останова для события Page_Load для каждого из элементов управления, а также для page.aspx, и это также занимает около 30 секунд с момента нажатия ссылки с Response.Redirect до первой точки останова.

Я загрузил диспетчер задач и нажал на ссылку. Я заметил, что aspnet_wp.exe и csc.exe запускаются в течение этого 30-секундного периода времени.

Мне интересно, есть ли какой-то кодин-шинаниганы, пока я жду загрузки страницы.

Это происходит только при первом нажатии на ссылку. Впоследствии это не так медленно.

Я погуглил, но полезной информации по этому поводу немного. У кого-нибудь есть идеи?

Спасибо

--- Dan ---

Ответы [ 2 ]

8 голосов
/ 05 марта 2010

При первой загрузке страницы asp.net компилирует множество страниц, почти все из которых находятся в одном и том же каталоге, включая модули и библиотеки DLL, найденные в bin.

Чтобы ускорить (ваше развитие), попробуйте использовать эту опцию в web.config (только на вашем компьютере разработки).

<compilation batch="false" ... >

Используя batch = "false", asp.net компилирует только одну страницу, ту, на которой вы находитесь, так что вы впервые получаете много времени для dll, но после этого намного меньше, если у вас есть 200 страниц , и вы меняете только один, и вы разрабатываете / отлаживаете только один.

Также, если вы можете, попробуйте не использовать каталог App_Code и поместите весь ваш код в dll. Узнайте больше о параметрах компиляции в web.config, чтобы он работал еще быстрее, например, измените временный каталог на более быстрый диск, чем C:.

Второй трюк

Я хотел бы сказать еще один трюк, который я нашел здесь в stackoverflow.

<compilation optimizeCompilations="true">

Вам нужно только установить MS patch http://support.microsoft.com/kb/961884 Я проверил его, и результаты очень хорошие.

.net 4 и Visual studio 2010

То же самое стоит, но вам не нужно запускать патч.

Веб-ферма

Я заметил, что в веб-ферме при первом запуске приложения, если у вас много работы с global.asax при запуске приложения, , тогда я рекомендую использовать Mutex и разрешить компиляции только одного пула. страницы! В противном случае возможны конфликты и огромная задержка запуска приложения - особенно если вы используете мьютекс в другой части программы.

0 голосов
/ 05 марта 2010

Тот факт, что csc.exe запущен и происходит только при первом щелчке ссылки, указывает на то, что в aspx есть много элементов, которые необходимо скомпилировать перед отображением страницы. Ищите вещи, которые существуют в дырках с выражением <%= %>. Это также может быть что-то в самих элементах управления (особенно если это пользовательские элементы управления ascx, а не серверные элементы управления).

Причина, по которой это происходит только при первом нажатии на ссылку, заключается в том, что после этого объект скомпилированной страницы кэшируется, поэтому нет необходимости перекомпилировать, пока ваше приложение не будет перезапущено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...