删除旧问题&完全重写,因为我已经在这方面做了很多工作来查明问题。我的问题是我正在编写一个带有自定义服务器的自定义CMS,以非常高的速度/吞吐量为目标,但是我注意到某些数据或数据模式会导致严重的减速(从0到55 + ms响应)时间)。我真的需要一个比我更好的人帮助这个,因为我对发生的事情一无所知,我怀疑.net框架中的一个错误,但我不知道它可能在哪里,一点点.net代码浏览我没有建议输出Stream做任何特定于数据的
我测试过的东西确定不是问题:
如何重现问题:
我的结果:
任何帮助都非常感谢,将我的所有代表放在Bounty那里,因为我真的需要知道我是否沿着这条路走下去/获取更多信息来报告这个或者如果我走低层并做我自己的http.sys互操作(而且,最重要的是,如果错误仅在.net方面或更低级别,并且更低级别将无法修复它!)
示例文件是一个gziped数组,我的内容在db中预先缓存和预压缩,因此这代表了我需要发送的数据。
https://www.dropbox.com/s/ao63d7din939new/StackOverFlowSlowServerBug.zip
编辑:如果我有小提琴打开,有问题的测试回到0ms,我不知道该怎么做它到目前为止这意味着我发送一个主要的减速,当发送一些数据,这不是由数据类型但实际数据定义,如果我之间有小提琴,则不会发生这种情况。我很遗憾!
编辑2:用另一个浏览器测试只是为了确定,实际上它在IE上回到0ms所以我假设它可能实际上不是HttpListener错误而是Firefox错误,我将编辑我的问题&如果没有人另有建议,那就标记出来。如果是这种情况,任何人都知道我应该在哪里查看FF的代码来理解这个问题? (它肯定是一个问题,即使在他们一边,因为我再次比较2个文件,一个比另一个大,相同的文件格式,最大的一个总是需要0ms,最小的一个总是55ms!)
答案 0 :(得分:4)
两个请求问题:
铬:
火狐:
更多相关内容:
http://forums.mozillazine.org/viewtopic.php?t=341179
https://bugzilla.mozilla.org/show_bug.cgi?id=583351
IE:
如果你通过提琴手发送请求,你就永远不会有两个人通过。
性能问题:
首先,您的演示应用中的计时器存在问题。每次异步请求处理程序触发时都会重新启动,这意味着在收到请求B时,可能会在请求A完成之前重新启动为请求A启动的计时器,因此您将无法获得正确的值。改为在ContinueWith回调中创建秒表。
其次我无法看到“magicnumber”会真正影响性能(除非它会导致异常被抛出)。我可以导致性能降低的唯一方法是发出大量并发请求并导致等待锁持续命中。
总结:我认为HttpListener类没有问题