NGen ASP.NET 以节省内存 - 未使用本机映像



我们有一个托管的Web应用程序,我们将相同的应用程序部署到同一台计算机上的100+"租户"。 默认情况下,托管 DLL 的内存不在进程之间共享,这意味着我们将相同的 DLL 加载到内存中 100+ 次。目标是避免这种情况,NGen似乎是实现这一目标的方法,因为它特别允许这种情况发生。

ASP.NET 应用程序是预编译的,所有DLL都已NGen'ed,但似乎没有使用它们。

Fusion Log Viewer 为我们提供了以下输出:

*

程序集绑定器日志条目 (20.06.2017 @ 16:53:11) *

操作成功。绑定结果:hr = 0x0。操作 成功完成。

程序集管理器加载自: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 运行于 可执行文件 C:\Windows\System32\inetsrv\w3WP.exe --- 下面是详细的错误日志。

=== 预绑定状态信息 === 日志:显示名称 = SD。LLBLGen.Pro.ORMSupportClasses, Version=5.1.0.0, Culture=neutral, 公钥令牌=ca73b74ba4e3ff27(完全指定) 日志:应用库 = file:///E:/WebHotel/tenant/ItemService/日志:初始专用路径 = E:\WebHotel\tenant\ItemService\bin LOG: Dynamic Base = E:\Temporary ASP.NET 文件\项服务\081f93f5 日志:缓存基 = E:\临时 ASP.NET 文件\项服务\081f93f5 日志: AppName = fd860966 正在调用 程序集:产品核心库,版本=2.5.12456.0, 区域性=中性,公钥令牌=空。 === 日志:从 E:\Temporary ASP.NET Files\itemservice\081f93f5\fd860966\assembly\dl3\08cf29cf\00893e3e_afe9d201\SD 加载的 IL 程序集。LLBLGen.Pro.ORMSupportClasses.dll.

*程序集绑定器日志条目 (20.06.2017 @ 16:53:11) *

操作成功。绑定结果:hr = 0x0。操作 成功完成。

程序集管理器加载自: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 运行于 可执行文件 C:\Windows\System32\inetsrv\w3WP.exe --- 下面是详细的错误日志。

=== 预绑定状态信息 === 日志:显示名称 = SD。LLBLGen.Pro.ORMSupportClasses, Version=5.1.0.0, Culture=neutral, PublicKeyToken=ca73b74ba4e3ff27 (完全指定) 日志: 应用库 = file:///E:/WebHotel/tenant/ItemService/日志:初始专用路径 = E:\WebHotel\tenant\ItemService\bin LOG: Dynamic Base = E:\Temporary ASP.NET 文件\项服务\081f93f5 日志:缓存基 = E:\临时 ASP.NET 文件\项服务\081f93f5 日志: AppName = fd860966 正在调用 程序集:产品核心库,版本=2.5.12456.0, 区域性=中性,公钥令牌=空。 === 日志:从 E:\Temporary ASP.NET Files\itemservice\081f93f5\fd860966\assembly\dl3\08cf29cf\00893e3e_afe9d201\SD 加载的 IL 程序集。LLBLGen.Pro.ORMSupportClasses.dll.

如您所见,它不会从C:WindowsassemblyNativeImages_v4.0.30319_64加载本机映像...

用: NGen 显示"SD.LLBLGen.Pro.ORMSupportClasses, version=5.1.0.0, culture=neutral, PublicKeyToken=ca73b74ba4e3ff27">

给我们:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>ngen display "SD。LLBLGen.Pro.ORM 支持类, 版本=5.1.0.0, 区域性=中性, PublicKeyToken=ca73b74ba4e3ff2 7" Microsoft (R) CLR 本机映像 生成器 - 版本 4.6.1087.0 版权所有 (c) Microsoft公司。 保留所有权利。

: \服务器\e$\模板\2.5.12456.0\项目服务\bin\SD.LLBLGen.Pro.ORMSuppor 依赖"SD.LLBLGen.Pro.ORMSupportClasses, 版本=5.1.0.0, Cu lture=neutral, PublicKeyToken=ca73b74ba4e3ff27":

\服务器\e$\模板\2.5.12456.0\WS\bin\SD.LLBLGen.Pro.ORMSupportClasse s.dll

原生镜像:

标清。LLBLGen.Pro.ORMSupportClasses, Version=5.1.0.0, Culture=neutral, PublicKeyTok en=ca73b74ba4e3ff27

不确定这是否是问题所在,但c:windowssystem32inetsrvw3wp.exe似乎是 32 位可执行文件,并且您使用的是 64 位ngen.exe。如果你的应用是 32 位的,则需要使用 32 位ngen.exe,或者 64 位w3wp.exe(如果相反)。

如果这不是问题所在,您可能需要查看此博客文章(如果尚未
查看):https://kceiw.me/net-native-image-troubleshooting

最新更新