0

我目前正在尝试分析 ASP.NET MVC 剃刀视图呈现非常缓慢的性能问题:向浏览器返回响应需要 40 多秒。这个问题并不总是发生:通常页面在 ~1/2 秒内加载。

下面是由所述页面缓慢加载时组成的 MiniProfiler 跟踪的一部分的图像。右侧的列是自请求开始以来经过的时间,并且在渲染剃刀视图期间,跟踪显示了几秒钟的大跳跃。我不太明白的是,为什么其他两列(“持续时间(毫秒)”和“有孩子(毫秒)”)中的时间没有反映这些多秒延迟:我希望在那里看到大量数字也是。

让我大吃一惊的是,在执行“查找:EditorTemplates/...”步骤时似乎会出现很大的延迟。请注意,这些模板不存在(旁注:我没有明确尝试渲染这些编辑器模板,但搜索它们似乎是由页面上的kendo mvc 网格引起的)。是否会因等待磁盘 I/O 确定这些文件不存在而导致大量延迟?如果是这样:这怎么可能只是偶尔需要几秒钟并且通常相对较快地完成?

我应该如何解释这些结果以及导致多秒延迟的原因是什么?

迷你探查器跟踪

4

1 回答 1

0

您的问题听起来与我们最近遇到的问题相似:每个页面的第一次调用都需要很长时间(页面类似于/Login,/Templates/Files)。同一页面的每次连续调用都快得多。问题是,每当调用新页面时,都必须先对其进行编译。编译的程序集被缓存了,所以下次更快。

我们使用目标CleanBuild. 之后,我们使用以下 MSBuild 参数发布它:

/t:WebPublish
/p:Configuration=Release 
/p:WebPublishMethod=FileSystem
/p:publishUrl=%build.dirMSBuild%\projectName
/p:PrecompileBeforePublish=true 
/p:UseMerge=true 
/p:SingleAssemblyName=AppCode
/p:VisualStudioVersion=16.0
/p:DeleteExistingFiles=true 
/p:DebugSymbols=false 
/p:ExcludeApp_Data=false

这里最重要的标志是PrecompileBeforePublish确保在项目构建过程中构建视图。现在每个页面都几乎立即加载,即使是第一次调用也是如此。

于 2019-07-23T05:54:50.610 回答