asp.net-mvc – 神秘的ASP.NET MVC Action高延迟问题?

前端之家收集整理的这篇文章主要介绍了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).
原文链接:https://www.f2er.com/aspnet/246090.html

猜你在找的asp.Net相关文章