繁体   English   中英

HttpModule的性能是否与RAMMFAR一样差?

[英]Does an HttpModule perform as badly as RAMMFAR?

我知道我们应该谨慎使用RAMMFAR(runAllManagedModulesForAllRequests),例如Hanselman帖子中的建议。 原因是它将所有请求发送到每个受管模块。

但是我最近不得不创建一个HttpModule,我注意到它无论如何都会获取所有请求(因为那是一个模块的目的),现在我想知道设置RAMMFAR = true与仅使用托管对象之间是否存在任何性能差异。模块,如果该模块将要获取所有请求。

换句话说,托管模块是否被认为对性能有害? 如果我测试url并忽略了我不关心的请求,那会不会损害我的可扩展性?

编辑 :通过所有请求,我的意思是我看到对静态内容的请求,例如磁盘上的css,js和jpg文件。

编辑 :该模块是这样注册的:

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

您的帖子中有几个问题。 我将尝试单独解决它们。

具有虚拟(无操作)受管模块是否会影响性能/吞吐量?

是的,从IIS和ASP.NET需要协调本机<->托管代码转换的角度来看,这种转换会产生一些开销。 对于绝大多数应用程序而言,实际的应用程序逻辑使这种开销显得微不足道。 倾向于在配置文件中显示的应用程序类型是每秒处理数万或数十万个请求的站点。 在这一点上,我们通常建议非常注意应用程序中包含哪些模块,并尽可能缩小它们的尺寸。

为什么我的模块运行静态文件?

因为您在模块上没有ManagedHandler前提条件。 如果模块声明中存在此前提条件,则只有在请求针对托管端点(.aspx,.axd,无扩展名等)的情况下,该模块才会运行。 如果不存在此前提条件,则模块始终运行。

要指定managedHandler前提条件:

<modules>
  <add name="..." type="..." preCondition="managedHandler" />
</modules>

注意:如果您使用的是IIS 7.0或7.5,则可能需要安装修补程序http://support.microsoft.com/kb/980368,以使IIS将无扩展名的URL视为“托管”端点。

RAMMFAR实际做什么?

简而言之,它忽略了模块注册中指定的前提条件。 它的名称含义是:即使所有请求都不是针对托管端点的,它也会为所有请求运行所有managedHandler模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM