比HttpHandlers更快的东西是什么?

19

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

场景很简单:当访问网页时,我有一个应该被执行的方法。页面上没有其他任何操作,唯一渲染的输出是“完成”消息。我希望处理速度越快越好。

每次点击都是唯一的,因此无法使用缓存。

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

所以我的问题实际上是:有比使用HttpHandlers更快的方法来完成这项任务吗?

3个回答

28
根据你所做的事情而定,我不会期望使用HttpHandler会有很大的改善。我建议先编写HttpHandler并查看其性能表现。如果需要更快速度,尝试更仔细地查看处理请求时实际执行的操作,并查看哪些可以进行优化。例如,如果正在将日志记录到数据库,请尝试将其写入本地数据库而不是跨网络写入。如果仍然不够快,则可能需要查看编写低级别代码。在此之前,我会坚持使用对您来说最容易编写的内容。
供参考,我已在ASP.NET中编写了一个广告服务器(使用HttpHandlers),可以在负载下在0-15ms内提供广告(包括针对性和将印象记录到本地数据库)。我认为我进行了相当多的处理 - 但是这是一个相当不错的响应时间IMHO。
几个月后的更新:
如果清除默认包含的所有HttpModules,这将消除相当多的开销。默认情况下,以下HttpModules通过机器级别的web.config文件包含在每个站点中:
OutputCache Session(用于会话状态) WindowsAuthentication FormsAuthentication PassportAuthentication RoleManager UrlAuthorization FileAuthorization AnonymousIdentification Profile ErrorHandler ServiceModel
像我上面说的那样,我的广告服务器没有使用其中任何一个,因此在该应用程序的web.config中只需执行此操作:
<httpModules>
   <clear />
</httpModules>

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

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

ASP.NET MVC提示:ASP.NET MVC需要会话状态模块,除非您采取特定措施进行解决。有关更多信息,请参见此问题:如何在ASP.NET MVC中禁用会话状态?

IIS7更新:不幸的是,在IIS7中事情并不像以前那么简单。以下是如何清除IIS7中的HTTP模块


你说得没错:我将会把一些日志记录到数据库中。我原本计划创建一些小的文本文件,而不是直接写入数据库。这些文件稍后会被处理。但基于你的经验和卓越的响应时间,我决定采用简单的HttpHandler和数据库访问方式。 - Jakob Gade
1
我们所做的是在Web服务器上放置了一个SQL Express实例,该实例被写入数据,然后有一个作业将所有数据从Web服务器实例中提取到我们的主SQL服务器中。 - Daniel Schaffer

1
我不确定你的具体情况是什么,但如果你的页面所做的只是处理一些数据,那么你实际上根本不需要一个aspx页面或http处理程序。你可以编写一个ASMX Web服务或WCF服务来实现你需要的功能,这很可能会减少开销。WCF服务甚至不必托管在ASP.NET中。你可以从Windows服务或控制台应用程序中进行托管,并使用命名管道在进程内调用它。这可能会显著减少调用数据处理代码的开销。

好的,这个想法很好,我没有想到这可能是一个内部流程。我猜我们需要更多地了解他在做什么。 - Daniel Schaffer
我将会进行一些 AJAX/javascript 相关的工作,需要在服务器上注册客户端事件。我不太确定如何从 js 执行 WCF 服务方法,但我肯定会在这方面进行一些谷歌搜索。目前来看,HttpHandlers 对我来说可能是最好的解决方案。感谢您的回复。 - Jakob Gade
从js调用WCF服务实际上比你想象的要容易得多,特别是如果你不需要处理返回值(只需点火并忘记)。有关更多信息,请参见http://msdn.microsoft.com/en-us/library/bb514961.aspx。 - davogones

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接