18

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

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

每一次点击都是独一无二的,所以缓存不是一种选择。

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

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

4

3 回答 3

27

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

作为参考,我在 ASP.NET 中编写了一个广告服务器(使用 HttpHandlers),它可以在负载下在 0-15 毫秒内提供广告(包括定位和记录展示到本地数据库)。我以为我正在做很多处理-但恕我直言,这是一个很好的响应时间。


几个月后更新

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

  • 输出缓存
  • 会话(用于会话状态)
  • Windows身份验证
  • 表单身份验证
  • 护照认证
  • 角色管理器
  • 网址授权
  • 文件授权
  • 匿名识别
  • 轮廓
  • 错误处理程序
  • 服务模式

就像我上面说的,我的广告服务器不使用任何这些,所以我刚刚在该应用程序的 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 模块的方法

于 2009-02-04T03:53:47.470 回答
1

I'm not sure what your exact scenario is, but if all your page is doing is processing some data, you don't really need an aspx page or an http handler at all. You could write an ASMX web service or WCF service to do what you need and this would most likely be less overhead. The WCF service doesn't even have to be hosted in ASP.NET. You can host it from a Windows service or console app, and call it in-proc using named pipes. This would probably reduce the overhead for calling the data processing code significantly.

于 2009-02-04T04:06:13.967 回答
0

If you really have to use asp.net, you can also just hook into AuthorizeRequest step and intercept the request from there, do your processing and write your Done response directly.

于 2009-07-08T14:18:11.063 回答