【问题标题】:ASP.NET WebMethod Performance Issue in loading Context加载上下文中的 ASP.NET WebMethod 性能问题
【发布时间】:2013-04-15 13:34:02
【问题描述】:

我有一个 WebMethod,用于在初始加载后将一些 HTML 返回到页面中。该方法通过jQuery的ajax方法调用。

一切正常,但是,从这些调用加载请求状态时存在相当严重的性能问题。由于流量很大,CPU 使用率会达到最大值,实际上会扼杀整个网站的响应能力。

使用一个分析器,System.Web.Handlers.ScriptModule.OnPostAcquireRequestState() 被称为罪魁祸首,几乎 100% 的调用持续时间。

另一个分析器调用 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)

所以我可以通过负载测试在本地重现该行为,但由于库中的罪魁祸首,我不知道如何解决它。是否有任何“陷阱”会导致上下文恢复成本高昂?我可以简单地从 WebMethod 中删除上下文吗?

【问题讨论】:

    标签: jquery asp.net ajax webmethod


    【解决方案1】:

    原来问题在于 Page 类中有 WebMethod。这迫使 WebMethod 加载 Session State,它在 Session 对象上有一个读/写锁。这迫使请求同步执行,排队等待锁打开的请求。

    我无法强制页面中的 WebMethod 不加载 Session,甚至将其加载为只读。将 WebMethod 移动到它自己的 WebService 中允许这样做 - 并解决了问题。

    这解决了进入 WebMethod 时 CPU 的“锁定”问题,并允许方法同时执行,极大地缩短了页面的加载时间。

    【讨论】:

    • 您会注意到“WebMethod”属性还有一个“EnableSession=False”选项,您可以直接将其放入WebMethod 中以防止这种锁定。 VB<WebMethod(BufferResponse:=False, EnableSession:=False)>
    • 如果我没记错的话,那是几年前的事了,问题是在页面类中禁用 Web 方法上的会话不起作用。
    • 有人有这方面的文档或文章的链接吗?页面中的 WebMethod 强制会话?只是看着它,并没有看到太多......
    • @GP24,必须查看反编译的代码才能弄清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多