【发布时间】:2019-10-04 17:33:24
【问题描述】:
在 ASP.NET Core 2.1 中,我有一个带有 Razor 视图的 DLL 项目 (Microsoft.NET.Sdk),用于与多个应用程序共享常见的局部视图,如导航、页脚等。它的创建类似于described here。所以我有一个包含这些库并嵌入部分视图的 ASP.NET Core 2.1 MVC 应用程序。
虽然这可行,但我注意到此应用程序的首页加载时间大幅增加。主 HTML 文档大约需要 3 秒。随后的请求非常快(~30-40ms)。我尝试删除共享 DLL 嵌入的应用程序中的所有部分视图。现在第一个请求要快得多(大约 300 毫秒)。
所以它似乎是由从共享 DLL 项目加载 Razor 视图引起的。我尝试在 AppStartup 方法中使用不同的方法预加载程序集(灵感来自this question):
GC.KeepAlive(typeof(Assets.AssetStartup));
System.Reflection.Assembly.Load("Assets");
性能没有太大差异,第一次请求仍然需要大约 2.9 秒。
我该如何改进?
我知道 EntityFramework 的热身,因此,我想以类似的方式解决这个问题。但我不确定它到底在哪里减慢了我的应用程序:是程序集的加载(并且我的预取尝试在某种程度上是错误的),还是仍然与 Razor 编译有关?
因为我还知道通过预编译 Razor 视图可以提高性能。在 ASP.NET Core 1 中,我手动启用了此功能,第一个请求明显更快。由于 Microsoft 重新编写了这部分并默认启用了预编译,但我的 Razor DLL 应用程序不会生成名为 {AppName}.Views.dll 的文件(MVC 应用程序有它们),我不确定这是否是问题所在。
【问题讨论】:
-
一个重要的问题。当您使用发布配置发布时,您是否遇到过这种情况?还是您在开发中遇到这种情况?
标签: c# asp.net-core razor dll asp.net-core-2.1