在尝试优化性能的时候,如何可以了解到在应用程序启动的过程中,在什么步骤开始加载了某些 Dll 文件

在 VisualStudio 的 调试->窗口->模块 可以看到当前应用程序加载的所有模块,也就是应用程序加载了哪些 Dll 文件

一个调试方法是在合适的逻辑里面添加断点,或者在软件启动完成之后,通过模块了解应用程序加载了哪些 DLL 文件,从而了解应用程序启动慢是否因为加载了不应该加载的模块

在 dotnet 里面,可以通过辅助的代码了解是在哪些模块加载了 DLL 文件,例如我在调试的 SVG 库 是在哪个模块加载的,我不期望在启动的过程中有加载 SVG 相关的 DLL 文件,那么我可以如何了解到是在应用程序的哪个逻辑里面加载的?可以通过在应用程序的主函数里面添加如下代码用来在加载到 SharpVectors 模块进入断点

        [STAThread]
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
        }

        private static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
        {
            if (args.LoadedAssembly.FullName.Contains("SharpVectors"))
            {
                Debugger.Break();
            }
        }

如果是在 WPF 默认的应用里面,没有 Main 函数,那么写到 App 的构造函数也可以

public App()
{
    AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
}

在进入 CurrentDomain_AssemblyLoad 函数加载到 SharpVectors 的模块的时候,将会进入断点。通过调用堆栈,可以了解到是在访问到哪个业务逻辑需要加载的,然后再调试这个业务逻辑是否需要放在启动的过程


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/Windows-%E4%B8%8B%E7%9A%84-WPF-%E5%BC%80%E5%8F%91-%E8%B0%83%E8%AF%95%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%9C%A8%E4%BB%80%E4%B9%88%E6%97%B6%E6%9C%BA%E5%8A%A0%E8%BD%BD%E4%BA%86-Dll-%E6%A8%A1%E5%9D%97.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

微软最具价值专家


无盈利,不卖课,做纯粹的技术博客

以下是广告时间

推荐关注 Edi.Wang 的公众号

欢迎进入 Eleven 老师组建的 .NET 社区

以上广告全是友情推广,无盈利