代码之家  ›  专栏  ›  技术社区  ›  Jakob Gade

比httphandler更快?

  •  18
  • Jakob Gade  · 技术社区  · 16 年前

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

    场景非常简单:我有一个方法,当一个网页被点击时应该执行它。页面上没有其他内容,唯一呈现的输出是“完成”消息。我希望处理过程尽可能快。

    每次命中都是唯一的,所以缓存不是一个选项。

    我的计划是使用一个httphandler并在web.config(my page.ashx)中配置它,而不是使用常规的.aspx页面。这样可以显著降低开销。

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

    3 回复  |  直到 15 年前
        1
  •  26
  •   Community CDub    8 年前

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

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


    几个月后更新 :

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

    • 输出缓存
    • 会话(用于会话状态)
    • Windows身份验证
    • 表格认证
    • 密码验证
    • 打油机
    • 乌劳托里化
    • 文件授权
    • 匿名身份
    • 简况
    • 错误处理程序
    • 服务模型

    正如我上面所说,我的广告服务器不使用任何这些,所以我刚刚在该应用的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

        2
  •  1
  •   davogones    16 年前

    我不确定您的具体场景是什么,但是如果您的页面所做的只是处理一些数据,那么您根本不需要一个ASPX页面或HTTP处理程序。您可以编写一个asmx Web服务或wcf服务来完成您需要的工作,这很可能会减少开销。WCF服务甚至不必托管在ASP.NET中。您可以从Windows服务或控制台应用程序托管它,并使用命名管道在进程中调用它。这可能会大大减少调用数据处理代码的开销。

        3
  •  0
  •   user134706    16 年前

    如果您真的必须使用ASP.NET,您还可以直接钩住authorizeRequest步骤并从中截取请求,进行处理并编写 多恩 直接回复。

    推荐文章