我有一个应用程序,其表单第一次打开缓慢,之后表单很快打开。我已经完成并使用JustCode删除了不需要的引用。所以应用程序应该只是所需的程序集。这减少了加载时间。然后我添加了一些调试代码来显示创建表单后正在加载的程序集。
var currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyLoad += AssemblyLoadHandler;
currentDomain.AssemblyResolve += AssemblyResolveHandler;
AssemblyLoadHandler方法只是将正在加载的程序集写入日志文件。日志文件显示我们的一些第三方程序集正在加载。我知道这些程序集没有使用,所以我从目录中删除它们。一旦它们被移除,它们就不会显示为已加载。我使用JustDecompile检查了程序集引用并运行了Process Explorer并查看.Net Assemblies选项卡中的已加载dll。这些第三方dll不会显示在已加载程序集的列表中。
我正在使用的方法来跟踪这个声音,或者我做错了什么,并且回调AssemblyLoad是否正在报告加载的dll?
更新
我也在使用解析处理程序回调,但只通过该路由报告了一个dll,它是需要的。我尝试使用RequestingAssembly.FullName进行调试,但没有其他dll通过解析处理程序报告:
currentDomain.AssemblyResolve += AssemblyResolveHandler;
更新1:
我忘记了在这个应用程序中使用MEF的重要考虑因素,它是.Net 4.5.1。在代码中有加载程序集目录,但我还没有看到任何方法来查明是否正在加载其他dll。由程序集目录加载的dll是必需的,并且没有使用Assembly.Load动态加载程序集。
更新2: 我将尝试快速拍摄AppDomain基于此文章方法加载的dll When is an assembly loaded
更新3:
对AppDomain.CurrentDomain.GetAssemblies()的调用将获取在创建和初始化表单之前加载的程序集列表。创建表单后再次获取已加载的程序集列表。然后对前后列表进行区别以显示已加载的程序集。我的差异列表是我所期望的,但AssemblyLoad报告的列表包含未使用的dll,并且不在应用程序或其引用程序集的依赖项中。 我认为AssemblyLoad回调的用法是明确的,并且描述说它是在加载程序集时发生的。但它向我报告的信息似乎不正确。
您可以提供任何信息。