在ASP.NET网站上执行方法的最快方法是什么?
场景非常简单:我有一个方法,应该在网页被点击时执行。页面上没有其他任何事情发生,唯一呈现的输出是“完成”消息。我希望处理能够尽可能快。
每一次点击都是唯一的,因此缓存不是一种选择。
我的计划是使用HttpHandler并在web.config(mypage.ashx)中配置它,而不是常规的.aspx页面。这应该会显着减少开销。
所以我的问题是:有没有比使用HttpHandlers更快的方法来实现这一目标?
答案 0 :(得分:26)
根据您正在做的事情,我不希望看到使用HttpHandler有很多改进。我首先编写HttpHandler并查看它的执行情况。如果您需要更快,请在处理请求并查看可以优化的内容时,仔细查看您实际执行的操作。例如,如果您正在对数据库进行任何记录,请尝试写入本地数据库而不是通过网络。如果它仍然不够快,那么可能会考虑写一些较低级别的东西。不过,在那之前,我会坚持用最简单的方式写作。
作为参考,我已经在负载下0-15ms写入ASP.NET广告服务器(使用HttpHandlers的),可以提供广告(包括定位和记录的印象到本地数据库)。我以为我正在做相当多的处理 - 但这是一个非常好的响应时间恕我直言。
几个月后更新:
如果清除默认包含的所有HttpModule,这将消除相当多的开销。默认情况下,通过机器级web.config文件在每个站点中包含以下HttpModule:
就像我上面说过的那样,我的广告服务器没有使用其中任何一个,所以我刚刚在该应用的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 响应。