2014-03-06 6 views
2

Я знаю, что мы должны быть осторожны с использованием RAMMFAR (runAllManagedModulesForAllRequests), например совета в this Hanselman post. Причина в том, что он отправляет все запросы в каждый управляемый модуль.Выполняет ли HttpModule так же плохо, как RAMMFAR?

Но мне недавно пришлось создать HttpModule, и я заметил, что он все равно получает все запросы (потому что для этого нужен модуль), и теперь мне интересно, есть ли разница в производительности между установкой RAMMFAR = true и просто имеет управляемый модуль, если этот модуль будет получать все запросы.

Иными словами, управляемые модули считаются вредными для производительности? Если я тестирую URL-адрес и игнорирую запросы, которые мне не нужны, может это повредить мою масштабируемость?

Редактировать: По всем запросам я имею в виду, что я вижу запросы на статическое содержимое, такие как css, js и jpg-файлы, которые находятся на диске.

Edit: Модуль зарегистрирован как это:

<modules> 
    <add name="MyModule" type="MyNamespace.MyModule, MyAssembly"/> 
</modules> 
+1

Вы уверены, что все это запросило? Включая запросы на статический контент? Как вы зарегистрировали HttpModule? Здесь отсутствуют все виды информации. –

+0

В дополнение к вопросам Анта, это IIS или IIS Express? Они ведут себя по-разному: как вызывается управляемые модули. – Levi

+0

@AntP: Я обновил вопрос с этой информацией. Да, я вижу запросы на статический контент. –

ответ

3

Есть несколько вопросов, в вашем посте. Я попытаюсь разобраться с ними индивидуально.

Имеет ли управляющий модуль управляемый модуль (нет-op) эффективность/пропускная способность?

Да, с точки зрения того, что IIS и ASP.NET необходимо скоординировать исходный код перехода, и этот переход несет некоторые накладные расходы. Для подавляющего большинства приложений эти издержки затмеваются реальной логикой приложения. Типы приложений, в которых это проявляется в профилях, - это сайты, которые обслуживают десятки тысяч или сотни тысяч запросов в секунду. В этот момент мы обычно рекомендуем уделять очень пристальное внимание тому, какие модули включены в приложение и как можно больше обрезать их.

Почему мой модуль работает для статических файлов?

Поскольку у вас нет managedHandler Предварительное условие для модуля. Если это предварительное условие присутствует в объявлении модуля, этот модуль будет работать, только если запрос предназначен для управляемой конечной точки (.aspx, .axd, extensionless и т. Д.). Если этого предусловия нет, модуль всегда работает.

Чтобы указать managedHandler предпосылку:

Примечания: если вы на IIS 7.0 или 7.5, возможно, потребуется установить патч http://support.microsoft.com/kb/980368 получить IIS, чтобы увидеть extensionless URL-адрес в качестве «управляемого» конечные точки.

Что на самом деле делает RAMMFAR?

Вкратце, он игнорирует предварительное условие, указанное в регистрах модуля. Он делает то, что подразумевает его название: он управляет всеми модулями managedHandler для всех запросов, даже если эти запросы не предназначены для управляемой конечной точки.

+0

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