HttpListener:写入outputstream的速度较慢,具体取决于内容



删除了旧问题&完全重写,因为我已经做了很多工作来找出问题所在。我的问题是,我正在用自定义服务器编写一个自定义CMS,目标是非常非常高的速度/彻底性,但我注意到一些数据或数据模式会导致严重的速度减慢(响应时间从0到55+ms)。我真的需要比我更好的人来帮助我,因为我完全不知道发生了什么,我怀疑.net框架中有一个错误,但我不知道它可能在哪里,我浏览的.net代码并没有建议输出流做任何特定于数据的

我测试过的东西肯定不是问题所在:

  • 内容的大小(内容越大越快)
  • 内容的类型(相同内容类型之间的差异)
  • 周围的大部分代码(制作了一个复制错误的极简主义项目,大约有15行,在帖子底部找到链接,包括复制它的数据,运行它,用2个URL测试,请参阅)
  • 网页/缓存等不是问题,在Firefox中用单个图像和CTRL+F5复制的问题,删除图像的最后几个字节100%修复,将它们添加回来会再次导致问题
  • 输出流之外不存在问题(用目标内存流替换它不会显示问题)

如何重现问题:

  • 下载&运行项目
  • 使用您喜欢的浏览器并转到localhost:8080/magicnumber
  • 将该url中的magicnumber替换为您想要的,您将收到减去该字节数的图像

我的结果:

  • 该图像持续50ms左右
  • 将魔术数字提高到1000一点也不影响
  • 再进一步(我认为大约1080 ish?)它突然下降到0MS
  • 不确定发生了什么,但在Firefox中使用CTRL+F5时,每个请求似乎至少有2个请求,在正确的情况下,两者都是0ms,在错误的情况下第一个保持0ms,但另一个变成50ms,我假设第一个只是检查文件缓存是否正常;我还在接,但Firefox关闭了连接还是怎么了

我们非常感谢任何帮助,将我所有的代表都放在Bounty上,因为我真的需要知道我是沿着这条路走下去/获得更多信息来报告这件事,还是我去了更低的级别并做了我自己的http.sys互操作(最重要的是,如果错误只在.net端或更低的级别&去更低的级别不会修复它!)

示例文件是一个gziped数组,我的内容被预缓存并预压缩在db中,所以这代表了我需要发送的数据。

https://www.dropbox.com/s/ao63d7din939new/StackOverFlowSlowServerBug.zip

编辑:如果我打开了fiddler,有问题的测试会回到0ms,到目前为止我不确定该怎么做,这意味着我在发送一些数据时会出现严重的速度减慢,这些数据不是由数据类型定义的,而是由实际数据定义的,如果我有fiddler在中间,这种情况就不会发生。我不知所措!

编辑2:用另一个浏览器测试只是为了确定,实际上它在IE上回到了0ms,所以我假设它实际上可能不是HttpListener错误,而是Firefox错误,我会编辑我的问题&如果没有人提出其他建议的话。如果是这样的话,有人知道我应该在FF的代码中查找哪里来理解这个问题吗?(即使在他们这边,这也是一个问题,因为我再次比较了两个文件,一个比另一个大,相同的文件格式,最大的总是需要0ms,最小的总是55ms!)

两个请求问题:

铬:

  • 第一个请求=收藏夹
  • 第二个请求=图像

Firefox:

  • 第一个请求=选项卡的图像
  • 第二个请求=图像

更多信息:

http://forums.mozillazine.org/viewtopic.php?t=341179

https://bugzilla.mozilla.org/show_bug.cgi?id=583351

IE:

  • 似乎只提出了一个请求

如果你通过fiddler发送请求,你永远不会收到两个。

性能问题:

首先,你的演示应用程序中的计时器出现了问题。每次异步请求处理程序触发时,它都会重新启动,这意味着为请求A启动的计时器将在收到请求B时重新启动,可能在请求A完成之前,因此您将无法获得正确的值。改为在ContinueWith回调中创建秒表。

其次,我看不出"magicnumber"会真正影响性能(我想除非它导致抛出异常)。导致性能下降的唯一方法是发出大量并发请求,并导致等待锁定不断被命中。

总之:我认为HttpListener类没有问题

相关内容

  • 没有找到相关文章

最新更新