C# HttpListener:写入outputstream速度慢,具体取决于内容?
删除了旧问题&完全重写,因为我已经在这方面做了很多工作,以查明问题所在。我的问题是,我正在编写一个带有定制服务器的定制CMS,目标是非常高的速度/彻底性,但是我注意到一些数据或数据模式会导致严重的速度减慢(从0到55毫秒的响应时间)。我真的需要一个比我更好的人来帮助我,因为我对正在发生的事情一无所知,我怀疑.net Framework中有一个bug,但我不知道它可能在哪里,我所做的小小的.net代码浏览并没有建议输出流做任何特定于数据的事情 我已经测试过并确定不是问题的东西:C# HttpListener:写入outputstream速度慢,具体取决于内容?,c#,.net,stream,httplistener,C#,.net,Stream,Httplistener,删除了旧问题&完全重写,因为我已经在这方面做了很多工作,以查明问题所在。我的问题是,我正在编写一个带有定制服务器的定制CMS,目标是非常高的速度/彻底性,但是我注意到一些数据或数据模式会导致严重的速度减慢(从0到55毫秒的响应时间)。我真的需要一个比我更好的人来帮助我,因为我对正在发生的事情一无所知,我怀疑.net Framework中有一个bug,但我不知道它可能在哪里,我所做的小小的.net代码浏览并没有建议输出流做任何特定于数据的事情 我已经测试过并确定不是问题的东西: 内容大小(内容越
- 内容大小(内容越大,速度越快)
- 内容类型(相同内容类型之间的差异)
- 大部分周围的代码(做了一个简单的项目来重现这个bug,大约15行,在文章的底部找到链接,包括数据来重现它,运行它,用2个URL测试,自己看)
- 网页/缓存等不是问题,在Firefox中使用单个图像和CTRL+F5复制的问题,删除图像的最后几个字节会100%修复该问题,将其添加回会再次导致问题
- 不是outputstream之外存在的问题(将其替换为目标memorystream不会显示该问题)
- 下载并运行项目
- 使用您喜爱的浏览器并转到localhost:8080/magicnumber
- 将该url中的magicnumber替换为您想要的,您将收到减去该字节数的图像
- 该图像的常数为50毫秒左右
- 将魔法数字提高到1000根本不会影响这一点
- 再往前一点(我想大约是1080 ish?),它会突然下降到0毫秒
- 不确定发生了什么,但在Firefox中使用CTRL+F5时,每个请求至少有2个请求,在正确的情况下,两个都是0毫秒,在错误的情况下,第一个保持0毫秒,但另一个变为50毫秒,我假设第一个是简单地检查文件缓存是否正常&我仍然在回答,但是Firefox关闭了连接还是什么
- 第一个请求=favicon
- 第二个请求=图像
- 第一个请求=选项卡的图像
- 第二个请求=图像
- 仅显示发出一个请求
总而言之:我认为HttpListener类没有问题您的基准测试是针对Windows还是针对Windows Server?我都做了,我给出的运行是针对Windows 8.1的,但是我认为单连接不应该有不同。请注意,这不是一个性能问题(根据连接的服务器和客户端设置,两者可能有所不同),而是一个依赖于内容的性能问题。it:在强健的Windows server 2012 DC上运行了特定测试,这不是结论,但总的来说,测试时间要短得多,我需要在它上面找到一个更大的复制盒,但我以前确实看到过类似的东西(在一张用了将近200毫秒的图片上),如果你安装Fiddler,你会得到一些可能有助于激发大脑的信息。如果我这样做了,我会感到惊讶,因为它写入输出流的速度很慢,我不确定Fiddler会在上面告诉我什么(需要50毫秒的不是下载阶段,而是firebug中的“等待”阶段)这不是我的专业领域,所以如果你有任何建议,我很乐意,如果你能抓住这个项目并运行fiddler,你是对的,我不认为它可以是N+1而不是NX2,但是我不能把它标记为答案,我只是把它放在那里,以防它与pr有关