gpt4 book ai didi

ASP.NET Request.Form 性能

转载 作者:行者123 更新时间:2023-12-03 15:11:55 28 4
gpt4 key购买 nike

我用了HttpHandler实现以高性能为目标的轻量级 Web 服务。它需要一个 POST内容类型 application/x-www-form-urlencoded . Web 服务执行许多任务,包括解密、数据库工作、业务逻辑等。在负载测试期间,性能监视器(ANTS 和 Visual Studio)指向占用大部分时间(实际上是 67%)的单行代码。

string value = context.Request.Form[MY_FORM_KEY];

在这行代码的调用堆栈底部,性能监视器说这个调用:
System.Web.Hosting.UnsafeIISMethods.MgdSyncReadRequest();

是罪魁祸首。

谁能帮忙解释一下?!该应用程序位于 .Net 4 中,在 Windows Server 2008 上作为发行版 IIS 7 发布。

谢谢,
乔伊·巴雷特

最佳答案

发生时间延迟的原因是 IIS 尝试从客户端读取请求流以检索表单值。此流受客户端连接的影响,在某些情况下甚至不会返回。我见过 Request.Form 会阻塞超过 5 分钟并且会导致 IIS 最终抛出 ThreadAbortException 的情况。

在我们的例子中,我们有一个 HttpModule 必须读取 Request.Form 值(或 request["key"] 也遍历表单值),它会随机阻塞在服务器上并且永远不会返回。我使用这个 HttpModule 来跟踪服务器端的应用程序性能,这让我意识到我使用这个模块跟踪的任何东西也将依赖于客户端的连接,这会扭曲我的服务器端执行结果。

要解决此问题,您可以在应用程序前面安装反向 HTTP 代理。反向代理将卸载读取客户端流(并阻止应用程序中昂贵的线程)的责任,并将完整的请求发送到您的服务器。这将减少应用程序的负载,因为您可以节省宝贵的应用程序线程来处理主要工作负载,而不是阻止它们从客户端流中读取。

此外,您可以卸载 HTTPS、负载平衡,甚至在反向代理上缓存一些静态内容(取决于您使用哪一个)。

关于ASP.NET Request.Form 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880168/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com