5

我面临以下问题,此时我觉得我严重缺乏某种工具,我只是不知道那个工具是什么,或者它到底应该做什么。

这是设置:我有一个必须在 GAC 中注册的第 3 方 DLL。这一切在我们之前部署软件的几乎每台机器上都运行良好。但是现在我们有两台机器,看起来和我们知道的可以工作的机器完全相同(它们是从同一个镜像中克隆出来的,并且填充了相同的硬件,所以几乎唯一的区别是软件设置,我一遍又一遍地检查,他们看起来不错)。

现在的问题是,GAC 中的 DLL 需要很长时间才能加载。至少我相信这是问题所在,我可以明确地说,从该 DLL 实例化单个类是缓慢的部分。一旦加载,事情就会像往常一样飞翔。但是,虽然在已知良好的机器上,DLL 加载速度如此之快,以至于日志中的时间戳甚至都不会改变,但在这 2 台机器上,加载需要超过 1 分钟。

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

在调试功能方面具有更高技能的人可以建议我可以做些什么来找出这个问题的根本原因吗?

4

2 回答 2

2

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

于 2010-03-28T12:23:26.640 回答
1

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

  1. 禁用我的代码(工具 -> 选项 -> 调试器 -> 常规)
  2. 在调试器下启动程序
  3. 等待挂机
  4. 打断。
  5. 打开调用栈

此时,您应该能够看到程序当前中断的位置。本质上是方法的名称。这将为您提供一些指示,说明在加载期间哪些操作需要花费这么多时间(即使您没有源代码)。

如果方法不熟悉,请在此处发回数据,希望有人能够帮助您找出问题所在。

于 2009-09-22T22:44:08.967 回答