Странная проблема с добавлением процессора в процесс w3wp - PullRequest
0 голосов
/ 19 января 2011

У меня самая странная проблема ... У меня монорельсовый веб-сайт (решение .NET, похожее на ASP.NET MVC) ... и на одной из страниц есть кнопка сохранения.При нажатии кнопки «Сохранить» выполняется некоторый код для сохранения объекта в базе данных, а затем перенаправляется на другую страницу.Однако, то, что он делает, это сразу после нажатия кнопки сохранения, он выполняет весь код сохранения, затем некоторое время остается там, а затем перенаправляет на другую страницу и выполняет свой код.Вот некоторые факты о ситуации, которые делают ее особенно странной.

  1. Каждый раз, когда вы проходите процесс нажатия кнопки «Сохранить» и ожидаете его завершения и перенаправления, это занимает на 2-4 секунды больше, чемв прошлый раз вы пытались.Итак, в первый раз это займет 2 секунды, затем, может быть, 5, затем 8 и т. Д. *
  2. Если вы перезапустите пул приложений, он снова будет работать быстро, но затем сработает факт №1Чем медленнее вы становитесь, тем медленнее.
  3. Я добавил в логирование, и он выполняет код сохранения и перенаправления за 1 миллисекунду, затем некоторое время ждет, а затем быстро выполняет код новой страницы.
  4. Я попытался изменить его для перенаправления на google.com, и он по-прежнему ведет себя таким образом.
  5. Я попытался вообще не перенаправлять его, просто снова обслуживать существующую страницу после сохранения, и она все еще ведет себятаким образом.
  6. Каждый раз, когда вы нажимаете кнопку сохранения, происходит выброс процессора (особенно процесс w3wp.)
  7. Другие страницы ведут себя не так, даже другие методы сохранения.
  8. Комментирование кода, сохраняемого в базе данных, заставляет его работать правильно, без ожидания.

Так есть ли у кого-нибудь идеи, что могло бы вызвать это?Код сохранения использует Active Record и NHibernate.Сам код работает очень быстро, как я уже говорил, он меньше 1 мс, но, похоже, что-то происходит асинхронно ПОСЛЕ того, как код завершает выполнение, что приводит к его зависанию в течение длительного времени.код: http://pastebin.com/XGLAWPgK.

1 Ответ

0 голосов
/ 19 января 2011

Мой монорельс немного ржавый ...

Вы утилизируете свой контекст ActiveRecord / nHibernate после каждого запроса или кэшируете его в состоянии сеанса? Вы должны создать новый контекст для каждого запроса.

Хотите загружать объекты данных? Если вы сохраняете данные, возможно, они выбирают все связанные объекты.

...