我一直在跟踪网站的性能,在所有缓慢执行的代码(> 1s)中,超过90%的原因是System.Web.HttpRequest.GetEntireRawContent()(由System.Web.HttpRequest.FillInFormCollection()调用) )

这对于ASP.NET网站是正常的……有时在FillInFormCollection方法中花费10秒钟以上(显然是从System.Web.UI.Page.PerformPreInit()调用的)?

还是有解决此问题的方法?

我正在为.NET Framework 3.5进行编译。

我最麻烦的页面是“登录”页面,尽管没有什么不寻常的地方-两个文本框,“记住登录”复选框和“登录”按钮。 Request.ContentLength约为5KB(我已经记录了Request.Form.ToString()-发现没有异常)。我已经进行了很多跟踪(期望有大量的POST)和调试,但是找不到任何合理的理由来使FillInFormCollection花费超过10秒的时间(我曾经有250秒的极端例子)。我什至尝试减慢与Fiddler的连接,但无法重现该问题。

编辑:感谢所有的评论家伙。我一直在追求这个问题...如果它得到解决,至少可以节省很多时间;)。以下是一些问题的答案。

  • 这是普通的HTTP(不是HTTPS),Log中有0个错误(有趣的是,请求实际上已经完成了;)
  • 用户单击Login.aspx时未加载网站。站点实际上在99%的时间内运行良好(每周处理大约4000万个HTTP请求,而AVG CPU利用率低于10%)
  • 绝对是application / x-www-form-urlencoded-以这种方式提交ASP.NET表单(runat = server)。我唯一不了解的是,为什么.NET需要> 10秒才能读取小于6KB的POST。
  • (到目前为止),我得出的唯一合理结论是->客户从真正慢速的连接(remember GPRS?)访问站点。但是我真的很想探索所有其他选项,而不仅仅是诉诸“它的用户连接”。如果是这样的话,我希望我会在每个页面上看到类似的情况。
  • 只是希望它不是这样的:IIS 6.0 Server Too Busy HTTP 503 Connection_Dropped DefaultAppPool
  • 已转到此页面:Identifying Slow HTTP Attack Vulnerabilities on Web Applications这可能正在发生。
  • 最佳答案

    这是我发现我的应用程序在方法上表现不佳的问题,或者应该说是原因:System.Web.HttpRequest.FillInFormCollection()System.Web.HttpRequest.FillInFormCollection()似乎一开始就获得要提交到表单的数据,就开始启动,并且一旦收到最后一位数据就完成。如果我的用户连接状况不佳,则可能需要很长时间才能完全提交此信息。因此这种方法需要很长时间。

    我在本地计算机上使用了带宽限制器,并且能够再现一致的结果,该结果与我测试的速度变化相符,连接速度越慢,System.Web.HttpRequest.FillInFormCollection()的运行时间就越长。

    除非您抱怨您的网站无法正常工作,否则您可能只是在查看由糟糕的用户运行的代码。

    关于c# - System.Web.HttpRequest.FillInFormCollection()和System.Web.HttpRequest.GetEntireRawContent()非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8222336/

    10-17 01:00