Установка HTTPHandler isreusable свойство - PullRequest
0 голосов
/ 15 сентября 2010

Я использую обработчик HTTP для повышения загрузки файла. В основном код в «ProcessRequest» извлекает данные из базы данных, создает временную копию существующей электронной таблицы шаблона с GUID в качестве имени и записывает данные, полученные из БД в него ячейка за ячейкой, используя COM, загружает файл и удаляет созданную временную электронную таблицу. Весь этот процесс обычно занимает около 4-5 минут. Но когда мы пытались одновременно протестировать этот процесс, это заняло около 15 минут.

Мне интересно, может ли установка логического значения IsReusable в значение true помочь улучшить производительность. Но я не уверен, безопасно ли это.

Может ли кто-нибудь помочь мне с этим?

** Обновление: ** Поскольку я использую разные имена файлов для каждого из созданных временных файлов, я предполагаю, что проблем с безопасностью не будет. Но все еще не уверен.

Ответы [ 2 ]

4 голосов
/ 15 сентября 2010

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

Кроме того, если вы поддерживаете какое-либо состояние в обработчике, то в любом состоянии, в котором вы его оставите, будет следующий запрос. Это может иметь непредвиденные побочные эффекты.

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

1 голос
/ 15 сентября 2010

Свойство IsReusable имеет значение true, только если ожидается, что этот экземпляр HttpHandler будет обрабатывать несколько запросов. Там может быть другой параметр Web.Config, который решает вашу проблему, возможно, атрибут executeTimeout свойства httpRuntime:

<httpRuntime appRequestQueueLimit="100" executionTimeout="600" />  

Подробнее:

http://articles.sitepoint.com/article/web-config-file-demystified

...