Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpListener:写入outputstream速度慢,具体取决于内容?_C#_.net_Stream_Httplistener - Fatal编程技术网

C# HttpListener:写入outputstream速度慢,具体取决于内容?

C# HttpListener:写入outputstream速度慢,具体取决于内容?,c#,.net,stream,httplistener,C#,.net,Stream,Httplistener,删除了旧问题&完全重写,因为我已经在这方面做了很多工作,以查明问题所在。我的问题是,我正在编写一个带有定制服务器的定制CMS,目标是非常高的速度/彻底性,但是我注意到一些数据或数据模式会导致严重的速度减慢(从0到55毫秒的响应时间)。我真的需要一个比我更好的人来帮助我,因为我对正在发生的事情一无所知,我怀疑.net Framework中有一个bug,但我不知道它可能在哪里,我所做的小小的.net代码浏览并没有建议输出流做任何特定于数据的事情 我已经测试过并确定不是问题的东西: 内容大小(内容越

删除了旧问题&完全重写,因为我已经在这方面做了很多工作,以查明问题所在。我的问题是,我正在编写一个带有定制服务器的定制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关闭了连接还是什么
非常感谢您的帮助,将我所有的代表放在Bounty上,因为我真的需要知道我是否走这条路/获取更多信息来报告这一点,或者我是否走较低的级别并执行自己的http.sys互操作(最重要的是,如果bug只在.net端或较低级别&走较低级别将无法修复!)

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

编辑:如果我打开了fiddler,有问题的测试会返回到0毫秒,我不确定到目前为止该如何处理这意味着我在发送一些数据时会遇到严重的减速,这些数据不是由数据类型定义的,而是由实际数据定义的,如果我有fiddler在其间,则不会发生这种情况。我不知所措

编辑2:用另一个浏览器测试只是为了确定,实际上它在IE上回到了0毫秒,所以我假设它实际上可能不是一个HttpListener错误,而是一个Firefox错误,如果没有人建议,我将编辑我的问题和标签。如果是这种情况,有人知道我应该在FF的代码中查找到什么地方来理解这个问题吗?(这肯定是一个问题,即使在他们这方面,因为我再次比较了两个文件,一个比另一个大,文件格式相同,最大的总是需要0毫秒,最小的总是55毫秒!)

两个请求问题:

铬:

  • 第一个请求=favicon
  • 第二个请求=图像
火狐:

  • 第一个请求=选项卡的图像
  • 第二个请求=图像
有关这方面的更多信息:

即:

  • 仅显示发出一个请求
如果你通过fiddler发送请求,你永远不会收到两个请求

性能问题:

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

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


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

您的基准测试是针对Windows还是针对Windows Server?我都做了,我给出的运行是针对Windows 8.1的,但是我认为单连接不应该有不同。请注意,这不是一个性能问题(根据连接的服务器和客户端设置,两者可能有所不同),而是一个依赖于内容的性能问题。it:在强健的Windows server 2012 DC上运行了特定测试,这不是结论,但总的来说,测试时间要短得多,我需要在它上面找到一个更大的复制盒,但我以前确实看到过类似的东西(在一张用了将近200毫秒的图片上),如果你安装Fiddler,你会得到一些可能有助于激发大脑的信息。如果我这样做了,我会感到惊讶,因为它写入输出流的速度很慢,我不确定Fiddler会在上面告诉我什么(需要50毫秒的不是下载阶段,而是firebug中的“等待”阶段)这不是我的专业领域,所以如果你有任何建议,我很乐意,如果你能抓住这个项目并运行fiddler,你是对的,我不认为它可以是N+1而不是NX2,但是我不能把它标记为答案,我只是把它放在那里,以防它与pr有关