0

When I run my mvc application using Visual Studio 2012 on Chrome, my page takes 36s to render - saw this using mini-profiler. When I host the project on a remote server and hit the server for the page, then it takes 36s on the first hit. But on subsequent hits, it dramatically reduces to 1s or less. Any thoughts on why this might be? On the remote server, when we restart the application pool, we are seeing it take 36s.

So question is, is it taking that long because of IIS allocating resources to the site or is there something else wrong with our setup? Our development time is really taking a hit with the amount of time that it takes each time we have to debug our project. Build and then takes 36s each time to render the page we are debugging.

4

2 回答 2

1

当您说“运行”时,我假设您的意思是调试。Debug 重新构建项目,然后一旦加载浏览器,每次都必须完成第一次加载的所有标准初始化。与服务器上的应用程序池启动所需的时间相同(36 秒)这一事实似乎证明了这一点。

FWIW,您只需每个 Visual Studio 会话中调试您的项目一次,即可启动 IIS Express。之后,您可以简单地重新构建项目并在之后直接刷新浏览器(无需在 Visual Studio 中使用调试)来测试您的更改。而且,仅当您对任何 *.cs 文件进行了更改时才需要重新构建。Razor 视图、web.config 等将在下一页加载时反映它们的更改,而无需重建。这样做你唯一失去的就是调试能力,很明显。您只会得到一个标准的死亡黄页,而不是自动跳转到 Visual Studio 中的违规代码。但是,我发现除非我真的需要调试,否则这种方法的开发速度要快得多。

于 2013-03-05T21:18:18.180 回答
0

想到了几种可能性:

查看汇编

默认情况下,当您在 Visual Studio 中处理项目时,视图是按需编译的。虽然 36 秒似乎需要长的时间来编译第一页的视图,但这可能是一个促成因素。如果您的页面发生更改,则必须重新编译。要在执行测量时消除此因素,您可以使用文本编辑器编辑 .csproj 文件并更改行

<MvcBuildViews>false</MvcBuildViews>

<MvcBuildViews>true</MvcBuildViews>

(这通常也是一个有用的设置)。

其他初始化开销

如果您在应用程序启动时进行大量初始化(可能从文件或数据库中预加载一些数据),则每次 Web 服务器启动或应用程序域回收时都必须进行初始化。在 Visual Studio 中,我发现 Web 服务器可以在令人惊讶的(对我而言)时间重新启动。添加一些日志以查看您是否在特定基准运行期间运行启动代码,并查看有多少开销。

实体框架

出于某种原因,Entity Framework在调试时运行速度要慢得多如果您通过 EF 进行大量数据访问,这可能会造成一些差异。

于 2013-03-05T20:51:49.413 回答