ASP.NET длинная задача зависает другие страницы - PullRequest
2 голосов
/ 28 сентября 2010

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

Проблема, которую я обнаружил, заключается в том, что на сайт зашли два пользователя.

  1. Пользователь 1 заходит на сайт
  2. Пользователь 1 запускает отчет, который занимает 30 секунд.
  3. Пользователь 2 заходит на сайт
  4. Пользователь 2 ждет, пока не закончится отчет пользователя 1, затем страница загружается.

Отчет, запущенный для пользователя 1, вешает сайт до тех пор, пока он не будет готов. Что происходит и как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

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

Тогда больше зависит от того, сколько работы может занять машина, создающая отчеты..

0 голосов
/ 28 сентября 2010

Как часто меняются данные отчета?Если, например, вы используете SQL Server, вы можете иметь хранимую процедуру для создания данных отчета в таблицу и запускать хранимую процедуру как задание агента SQL Server.Установите задание на частое выполнение, так как вы хотите, чтобы данные обновлялись.Это должно значительно ускорить ваши страницы.

Похоже, у вас могут быть оба запроса в одной теме?

...