NGen ASP.NET保存内存 - 未使用原生图像

时间:2017-06-20 15:23:11

标签: asp.net .net ngen

我们有一个我们托管的网络应用程序,我们将相同的应用程序部署到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

1 个答案:

答案 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