跟踪缓慢管理的DLL加载

时间:2009-09-22 22:32:45

标签: .net performance dll gac dllregistration

我遇到了以下问题,此时我觉得自己严重缺乏某种工具,我只是不知道该工具是什么,或者究竟应该做什么。

以下是设置: 我有一个必须在GAC注册的第三方DLL。这一切都很好,几乎在我们的软件部署之前的每台机器上都很好。但是现在我们有两台机器,看起来和我们工作的机器相同(它们是从相同的图像中克隆出来的,并且用相同的硬件填充,所以几乎唯一的区别就是软件设置,我一遍又一遍地重复它们,看起来很好)。

现在问题是,GAC中的DLL需要很长时间才能加载。至少我相信这是问题,我可以肯定地说,从该DLL实例化单个类是缓慢的部分。一旦它被装载,东西就像往常一样飞翔。但是在已知良好的机器上,DLL加载速度太快,以至于日志中的时间戳甚至没有变化,在这2台机器上加载超过1分钟

的已知,: 我无法访问源代码,因此无法通过DLL进行调试。我们的应用程序是唯一使用它的应用程序(因此不应该是同时访问问题)。这个DLL只有一个版本存在,所以它不应该是版本冲突的问题。正在使用GAC引用(如果我从GAC卸载DLL,则会抛出有关缺少的GAC引用的异常。)

在debug-fu中具有更高技能的人是否可以建议我如何追踪此问题的根本原因?

2 个答案:

答案 0 :(得分:2)

下载2个名为“filemon.exe”和“regmon.exe”的小工具,它们会向您显示有关打开文件的信息。注册表分别。每当我无法确定程序是否挂起或只是加载时,这些工具可让我深入了解他们正在做什么或者他们在等待什么。

答案 1 :(得分:1)

我认为你最好的选择是调试应用程序。调试应用程序并不严格需要Source,它只是让它变得更容易。这是我将使用的策略

  1. 禁用我的代码(工具 - >选项 - >调试器 - >常规)
  2. 在调试器下启动程序
  3. 等待挂起
  4. 点击休息。
  5. 打开调用堆栈
  6. 此时您应该能够看到程序当前被破坏的位置。基本上是方法的名称。这将为您提供一些指示,说明在加载过程中需要花费多少时间(即使您没有源代码)。

    如果该方法不熟悉,请回复此处的数据,希望有人能够帮助您解决问题。