比HttpHandlers更快的东西?

时间:2009-02-04 03:40:39

标签: asp.net performance httphandler

在ASP.NET网站上执行方法的最快方法是什么?

场景非常简单:我有一个方法,应该在网页被点击时执行。页面上没有其他任何事情发生,唯一呈现的输出是“完成”消息。我希望处理能够尽可能快。

每一次点击都是唯一的,因此缓存不是一种选择。

我的计划是使用HttpHandler并在web.config(mypage.ashx)中配置它,而不是常规的.aspx页面。这应该会显着减少开销。

所以我的问题是:有没有比使用HttpHandlers更快的方法来实现这一目标?

3 个答案:

答案 0 :(得分:26)

根据您正在做的事情,我不希望看到使用HttpHandler有很多改进。我首先编写HttpHandler并查看它的执行情况。如果您需要更快,请在处理请求并查看可以优化的内容时,仔细查看您实际执行的操作。例如,如果您正在对数据库进行任何记录,请尝试写入本地数据库而不是通过网络。如果它仍然不够快,那么可能会考虑写一些较低级别的东西。不过,在那之前,我会坚持用最简单的方式写作。

作为参考,我已经在负载下0-15ms写入ASP.NET广告服务器(使用HttpHandlers的),可以提供广告(包括定位和记录的印象到本地数据库)。我以为我正在做相当多的处理 - 但这是一个非常好的响应时间恕我直言。


几个月后更新

如果清除默认包含的所有HttpModule,这将消除相当多的开销。默认情况下,通过机器级web.config文件在每个站点中包含以下HttpModule:

  • 的OutputCache
  • 会话(针对会话状态)
  • WindowsAuthentication
  • FormsAuthentication
  • PassportAuthentication
  • RoleManager
  • UrlAuthorization
  • FileAuthorization
  • AnonymousIdentification
  • 资料
  • 的ErrorHandler
  • ServiceModel

就像我上面说过的那样,我的广告服务器没有使用其中任何一个,所以我刚刚在该应用的web.config中完成了这个:

<httpModules>
   <clear />
</httpModules>

如果你需要其中一些,但不是全部,你可以删除你不需要的那些:

<httpModules>
   <remove name="PassportAuthentication" />
   <remove name="Session" />
</httpModules>

ASP.NET MVC注意: ASP.NET MVC需要会话状态模块,除非您执行特定的操作来解决它。有关详细信息,请参阅此问题:How can I disable session state in ASP.NET MVC?

IIS7的更新:不幸的是,IIS7中的事情并不那么简单。这是how to clear HTTP Modules in IIS7

答案 1 :(得分:1)

我不确定您的确切方案是什么,但如果您的所有页面都在处理某些数据,那么您根本不需要aspx页面或http处理程序。您可以编写ASMX Web服务或WCF服务来执行您需要的操作,这很可能会减少开销。 WCF服务甚至不必托管在ASP.NET中。您可以从Windows服务或控制台应用程序托管它,并使用命名管道在进程内调用它。这可能会减少显着调用数据处理代码的开销。

答案 2 :(得分:0)

如果你真的必须使用asp.net,你也可以直接进入AuthorizeRequest步骤并从那里拦截请求,进行处理并直接编写 Done 响应。