我们有一个我们托管的网络应用程序,我们将相同的应用程序部署到100多个"租户"在同一台机器上。 默认情况下,托管DLL的内存不在进程之间共享,这意味着我们将相同的DLL加载到内存中100多次。目标是避免这种情况,NGen似乎是这样做的方式,因为它特别允许这种情况发生。
ASP.NET应用程序是预编译的,并且所有DLL都已经过NGen,但似乎没有使用它们。
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 ---详细的错误日志如下。
===预绑定状态信息=== LOG:DisplayName = SD.LLBLGen.Pro.ORMSupportClasses,Version = 5.1.0.0,Culture = neutral, PublicKeyToken = ca73b74ba4e3ff27(完全指定) 日志:Appbase = file:/// E:/ WebHotel / tenant / ItemService / LOG:Initial PrivatePath = E:\ WebHotel \ tenant \ ItemService \ bin日志:动态Base = E:\ Temporary ASP.NET Files \ itemservice \ 081f93f5日志:缓存基数= E:\ Temporary ASP.NET Files \ itemservice \ 081f93f5日志:AppName = fd860966正在呼叫 assembly:Product.Core.Library,Version = 2.5.12456.0, Culture = neutral,PublicKeyToken = null。 ===日志:IL程序集从E:\ Temporary ASP.NET Files \ itemservice \ 081f93f5 \ fd860966 \ assembly \ dl3 \ 08cf29cf \ 00893e3e_afe9d201 \ SD.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 ---详细的错误日志如下。
===预绑定状态信息=== LOG:DisplayName = SD.LLBLGen.Pro.ORMSupportClasses,Version = 5.1.0.0,Culture = neutral, PublicKeyToken = ca73b74ba4e3ff27(完全指定)LOG:Appbase = file:/// E:/ WebHotel / tenant / ItemService / LOG:Initial PrivatePath = E:\ WebHotel \ tenant \ ItemService \ bin日志:动态Base = E:\ Temporary ASP.NET Files \ itemservice \ 081f93f5日志:缓存基数= E:\ Temporary ASP.NET Files \ itemservice \ 081f93f5日志:AppName = fd860966正在呼叫 assembly:Product.Core.Library,Version = 2.5.12456.0, Culture = neutral,PublicKeyToken = null。 ===日志:IL程序集从E:\ Temporary ASP.NET Files \ itemservice \ 081f93f5 \ fd860966 \ assembly \ dl3 \ 08cf29cf \ 00893e3e_afe9d201 \ SD.LLBLGen.Pro.ORMSupportClasses.dll加载。
正如您所看到的那样,它不会加载C:\Windows\assembly\NativeImages_v4.0.30319_64
...
使用: NGen display" SD.LLBLGen.Pro.ORMSupportClasses,Version = 5.1.0.0,Culture = neutral,PublicKeyToken = ca73b74ba4e3ff27"
给我们:
C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> ngen显示 " SD.LLBLGen.Pro.ORM SupportClasses,Version = 5.1.0.0,Culture = neutral, PublicKeyToken = ca73b74ba4e3ff2 7" Microsoft(R)CLR Native Image Generator - 版本4.6.1087.0版权所有(c)Microsoft Corporation。 保留所有权利。
NGEN Roots:
\服务器\ E $ \模板\ 2.5.12456.0 \ ItemService \ BIN \ SD.LLBLGen.Pro.ORMSuppor NGEN Roots依赖于" SD.LLBLGen.Pro.ORMSupportClasses, Version = 5.1.0.0,Cu lture = neutral,PublicKeyToken = ca73b74ba4e3ff27":
\服务器\ E $ \模板\ 2.5.12456.0 \ WS \ BIN \ SD.LLBLGen.Pro.ORMSupportClasse s.dll
原生图片:
SD.LLBLGen.Pro.ORMSupportClasses,Version = 5.1.0.0,Culture = neutral, PublicKeyTok en = ca73b74ba4e3ff27
答案 0 :(得分:0)
不确定这是否是问题,但c:\windows\system32\inetsrv\w3wp.exe
似乎是32位可执行文件,并且您正在使用64位ngen.exe
。如果您的应用是32位,那么您需要使用32位ngen.exe
或64位w3wp.exe
,如果相反的话。
如果这不是问题,您可以查看此博文(如果您还没有):
https://kceiw.me/net-native-image-troubleshooting