asp.net-mvc – 神秘的ASP.NET MVC Action高延迟问题?
使用Firebug和Chrome开发人员工具,我可以看到通过一个动作加载一些 javascript和css文件可以在我的开发机器上花费额外的500ms.这发生在不同的调用上的不同文件,并且不管我把它们放在什么样的顺序上.如果我直接链接到这个文件,这个500ms的延迟是不会发生的.我可以一遍又一遍地刷新页面,并获得不同的值,但是它们总是在请求时间内添加500ms.如果我保持刷新页面,额外的500ms显示在不同的单个文件或有时两个文件,其中一个是1000ms延迟,如下图所示. 编辑 将Monitor.Enter放入我的HttpModule的BeginRequest和EndRequest中的Monitor.Exit导致延迟消失,所以我猜测它与线程多个请求有关. 我使用Evan Nagel here描述的方法进行缓存,但是当我使用刚刚传递原始文件的操作将链接替换为我自己的控制器时,会发生同样的情况: public FileResult RawFile(string path,string contentType) { var server = HttpContext.Server; string decodedPath = server.UrlDecode(path); string mappedPath = server.MapPath(decodedPath); return File(mappedPath,contentType); } 这是我的html头部的代码: <link rel="stylesheet" href="@Url.Action("RawFile",new { controller = "Content",path = "~/Content/Site.css",contentType = "text/css" })" type="text/css" /> <script src="@Url.Action("RawFile",path = "~/Scripts/debug/FBINFO.js",contentType = "application/x-javascript" })" type="text/javascript"></script> <script src="@Url.Action("RawFile",path = "~/Scripts/jquery-1.4.1.min.js",contentType = "application/x-javascript" })" type="text/javascript"></script> 这似乎不会在我的生产服务器上发生,至少不是很频繁,但是更难说,因为延迟更高.这是不是不要担心?会造成什么?它发生在Cassini和我的本地IIS服务器在Windows 7 Home Ultimate 64位. 我添加了一个自定义属性来调用调用,OnAction / OnResult Executing和Executed之间的时间通常是毫秒级.我在操作方法周围使用了一个秒表(ZipController写入响应流并且不返回结果),并且时间同样总是很小,平均为1.5ms,总是在10ms以下. 在Fiddler头文件中我唯一真正的区别是X-AspNetMvc-Version头,所以我设置它不被追加,甚至删除X-AspNet-Version头无效.我尝试启用和禁用压缩,以及我能想到的其他一切.这是在我添加了自己的Cache-Control和ETag头后没有效果.有趣的是,即使在不发送身体的304未修改响应的情况下,也会发生500ms的延迟.有时两个文件会有延迟,一个500ms,另外1000ms. 直接文件: HTTP/1.1 200 OK Content-Type: application/x-javascript Last-Modified: Sun,29 May 2011 22:42:27 GMT Accept-Ranges: bytes ETag: "b57a84af511ecc1:0" Server: Microsoft-IIS/7.5 Date: Mon,30 May 2011 04:38:20 GMT Content-Length: 1336 RawFile动作: HTTP/1.1 200 OK Cache-Control: public Content-Type: application/x-javascript ETag: "CD9F383D0537373C6D2DC8F60D6519A6" Server: Microsoft-IIS/7.5 Date: Mon,30 May 2011 04:34:37 GMT Content-Length: 1336 根据IanT8的评论,我添加了一个HttpModule来跟踪开始/结束请求,以及添加日志调用作为我的动作方法的第一个和最后一个语句.长篇小说,两个请求同时进入,在执行第二个调用的动作方法之前,在第一个EndRequest之后发生500ms的延迟.这个延迟通常是499ms,一次是497ms,一次498ms,一次492ms. 2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.196 BeginRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css 2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.197 BeginRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.203 Style() Start 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.208 Style() End 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.212 EndRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.704 Script() Start 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.712 Script() End 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.713 EndRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js 现在真的很有趣的部分.我在HttpModule上创建了一个静态对象,并在EndRequest中的BeginRequest和Monitor.Exit中调用Monitor.Enter.延迟消失了. Chrome显示一个通话约15-20ms,另外一个通话需要30-40ms,因为它必须等待第一个通话结束,但是500ms的延迟已经消失.这个解决方案显然不是最佳的. 解决方法尝试禁用会话(SessionStateAttribute).(编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net编程实现删除文件夹及文件夹下文件的方法
- asp.net – Windows应用程序与Web应用程序开发
- 从代码隐藏调用ASP.NET Web API
- asp.net-mvc – 使用AWS .NET SDK进行SNS订阅确认示例
- asp.net – 双回发问题
- 如何在ASP.NET Web应用程序中打开一个SectionGroup?
- asp.net – WebForms:MasterPages中的动态(或绝对)脚本标记
- asp.net – compilation debug =“true”和发布模式“relea
- AJAX分页的代码(后台asp.net)
- asp.net – 如何使用resxresourcewriter写入所有三个值?
- .NET 3.5 / VS 2008上的ASP.NET Web Services的自
- 优化 – 字典/客户端VS应用程序变量
- asp.net-mvc – 在MVC命令,优先级和功能问题中授
- asp.net – 在我的网站中添加HttpModule时出现“
- asp.net-mvc-3 – Url.Action没有给出预期的结果
- 使用ASP.NET Identity 2.0和MVC 5进行自定义单点
- asp.net-mvc – Asp.Net MVC CSLA DDD可能
- asp.net – 使用/ signalr / ping调用时使用长轮
- asp.net-mvc – 神秘的ASP.NET MVC Action高延迟
- ASP.NET中操作SQL数据库(连接字符串的配置及获取