.net 为什么我们的请求需要很长时间才能返回?

.net 为什么我们的请求需要很长时间才能返回?,.net,asp.net-mvc,.net,Asp.net Mvc,我们正在使用ASP.NET3和.NET4以及一些不同的IISE(7、8和Express版本) 所有对服务器的请求都需要很长的时间才能返回,无论请求什么,返回时间大约为10秒。我们可以看到(通过附加调试器)正在立即调用控制器方法,并且很快(在毫秒内)返回 我们还可以看到,当GET完成时,浏览器很快(在毫秒内)完成渲染等。因此,延迟介于“返回视图(无论什么)”和“获取完成”之间。这对我来说有点像视图编译——但它发生在每个请求上,所以不应该在第一个请求之后编译视图吗 我们可以使用视图预编译,但不幸的是

我们正在使用ASP.NET3和.NET4以及一些不同的IISE(7、8和Express版本)

所有对服务器的请求都需要很长的时间才能返回,无论请求什么,返回时间大约为10秒。我们可以看到(通过附加调试器)正在立即调用控制器方法,并且很快(在毫秒内)返回

我们还可以看到,当GET完成时,浏览器很快(在毫秒内)完成渲染等。因此,延迟介于“返回视图(无论什么)”和“获取完成”之间。这对我来说有点像视图编译——但它发生在每个请求上,所以不应该在第一个请求之后编译视图吗

我们可以使用视图预编译,但不幸的是,启用它会导致许多错误,我们不想为了使它工作而重建整个web项目。正如我上面所说的,视图应该在第一次使用时编译,因此预编译应该只在使用特定视图的第一次请求时才有帮助

你知道如何诊断这一点并找出真正需要时间的原因吗



编辑:在取出每页上呈现的一个局部视图后,突然间,所有内容都变快了。正在调查该视图。

罪犯代码如下所示:

itemFactory.Add()
    .Text(menuItem.Caption)
    .Selected(menuItem.Selected)
    .Action(menuItem.Action, menuItem.Controller)
    .Enabled(menuItem.Enabled)
    .Visible(menuItem.Visible)
    ;
这个C代码正在构建一个Telerik PanelBar(菜单)。此“fluent接口”的各种方法用于设置要添加的项的属性

不幸的是,有一种方法并没有像您预期的那样:Action(actionName,controllerName)

调用此方法实际上是在控制器上执行操作,而不是在单击PanelBar项时设置要执行的控制器操作

然而,这似乎是异步完成的,因为跟踪上述代码表明它几乎立即运行,因此被排除在外

修复方法是使用Url方法,而不是Action方法,并使用ASP.NET MVC Url方法构建Url。这与直觉相反,因为Telerik ASP.NET MVC框架肯定应该首先使用MVC,其次使用URL,但我们应该:

  • 查阅文档,而不是假设使用了什么方法
  • 注意到应用程序突然变慢了一个大的、固定的 数量,在每个页面上加载
  • 在运行探查器之后,我一直不知所措,因为似乎调用了我没有预料到的控制器方法——而且调用的来源似乎来自Telerik的代码(而不是我们的代码)。只有当我一次一个地删除导航部分视图时,我才最终发现Action()在做什么

    异步代码很棒,除非您尝试调试/配置文件,但找不到从何处调用它


    感谢评论中的建议。

    您使用过.net档案器工具吗?如果您启动IE并点击F12并转到“网络”选项卡,每个请求显示多长时间?您查看过客户端网络档案吗?Chrome有一个很好的工具,点击F12,点击“网络”并加载页面,看看花了多长时间。你可以试着用它来检查服务器上发生了什么你使用会话状态吗?缓存?您是否尝试过附加迷你探查器之类的工具?查看http响应的大小?查看脚本何时运行?