首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定是否使用GAC‘’ed和NGen‘’ed程序集

确定是否使用GAC‘’ed和NGen‘’ed程序集
EN

Stack Overflow用户
提问于 2010-02-17 16:25:09
回答 3查看 5.5K关注 0票数 13

如何确定在未在运行时验证程序集的签名甚至使用GAC‘’ed程序集的情况下使用本机映像?

我有一个复杂的系统,我们正在试验NGen,但是目前我们正在运行所有DLL所在的文件夹中的exe,因为有很多后期的绑定依赖关系,在Process中,看起来使用的是本机映像,但是如何确定我得到了全部好处并消除了Loader验证步骤?

干杯,格雷姆。

更新:--我从程序集绑定日志查看器获得了很多这样的东西:

代码语言:javascript
复制
LOG: [Level 1]Start validating IL dependency MyCompany.Entities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7cd8595f4671c5dd.
LOG: Dependency evaluation succeeded.

在最后

代码语言:javascript
复制
LOG: Validation of dependencies succeeded.
LOG: Start loading all the dependencies into load context.
LOG: Loading of dependencies succeeded.
LOG: Bind to native image succeeded.
Native image has correct version information.
Attempting to use native image C:\Windows\assembly\NativeImages_v2.0.50727_32\MyCompany.Mylibrary#\4710bb8309419d707681bd360088181f\MyCompany.MyLibrary.MyClass.ni.dll.
ZAP: Native image has been relocated.
Native image successfully used.

所以它使用的是本机映像,但仍然在验证它们,即不使用GAC版本,即使这是我创建本机映像的地方,比如:

代码语言:javascript
复制
ngen install "MyCompany.Entites, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7cd8595f4671c5dd, processorArchitecture=MSIL"

脚注:这篇文章似乎暗示,如果程序集不是从GAC加载的,那么验证过程将抵消NGen的优势?CLR内向外改进应用程序启动性能(MSDN)

更新-正如Nobugz在下面的评论中所指出的,自3.5SP1(参见:NGen上的MSDN文档)以来,不执行上述验证步骤。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-17 17:38:19

您可以从Fuslogvw.exe工具中轻松地看到它。从Visual命令提示符启动它。使用日志类别=本机映像、设置+日志将其配置为绑定到磁盘。运行你的程序。回到fuslogvw,Refresh它将显示已加载的所有程序集的列表。

双击一个条目以查看程序集是如何加载的。如果它来自GAC,你会看到:

日志:从C:\Windows\assembly\GAC_MSIL\blahblah加载的IL程序集

如果使用了Ngen-ed图像,您将看到:

日志:成功绑定到本机映像。

票数 12
EN

Stack Overflow用户

发布于 2010-02-17 16:35:25

您可以看到程序集是否很容易来自GAC:

代码语言:javascript
复制
Assembly assembly = Assembly.GetExecutingAssembly();

if (assembly.GlobalAssemblyCache)
{
    Console.WriteLine("I'm in the GAC!");
}

编辑:找到一种方法.

为了查看它是否是NGEN‘s,您必须直接读取程序集,并查看预编译头字段是否有与此页相同的数据。我在获得这个价值上有点生疏,但这应该可以做到。我看不出有什么办法可以通过反射方法来解决这个问题。

票数 3
EN

Stack Overflow用户

发布于 2016-10-17 13:16:25

您可以使用VMMAP。在那里,所有.dll (程序集)都有位置详细信息。

详细说明,如果您的程序集是从"C:\Windows\assembly\NativeImages(version)...“加载的因此,您的应用程序正在使用本机映像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2282397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档