3

我有一个非常奇怪的问题:我已经将一些 Matlab 代码编译成一个程序集。我使用以下 C# 行实例化该类:

MatPhiLib temp = new MatPhiLib(); // This line takes 40 seconds to execute.

第一次调用此行时,执行总是需要 40 秒。随后的调用是即时的。有些事情发生了变化,因为当我 4 个月前最后一次查看代码时并没有花这么长时间。

专家能否推荐一种方法来获得一些可见性以了解这里发生了什么?

更新:

注意到 UltraEdit(我的编辑器)第一次启动也需要 40 秒。我认为那里有一些联系,因为这也从未发生过。

更新:

发现问题:是我的新 NetGear Stora NAS 导致了淫秽网络超时问题。当我拔掉它时,一切都开始像涂了油脂的闪电一样工作。

愿一千只骆驼的跳蚤出没于负责那项史诗般的工程设计的驴脑家伙的腋窝。

4

1 回答 1

4
  1. 在 40 秒等待期的早期,闯入正在运行的进程(Debug → Break All)。
  2. 打开调用堆栈窗口(调试 → Windows → 调用堆栈)。
  3. 如果您将 MatLib 程序集用作外部库而不是解决方案中的项目,请右键单击“调用堆栈”窗口并在上下文菜单中选择“显示外部代码” 。
  4. 打开线程窗口(调试 → Windows → 线程)。
  5. 逐个选择线程并查看调用堆栈窗口。您应该能够从前几帧中看到每个线程在做什么——您应该能够看到 MatLib 代码中的哪个位置导致了延迟。(等待句柄中的线程正在等待其他线程完成工作或空闲等待其他线程创建工作以供它们处理。)

我的猜测是该库将尝试进行某种网络调用,而 40 秒是此调用的超时时间。您应该能够使用从上述步骤中学到的信息来跟踪库中的问题。

于 2011-03-30T13:19:48.263 回答