我遇到了一个非常奇怪的问题:我将一些 Matlab 代码编译成程序集。我使用以下 C# 行实例化该类:
MatPhiLib temp = new MatPhiLib(); // This line takes 40 seconds to execute.
第一次调用此行时,它总是需要恰好 40 秒才能执行。随后的调用是即时的。有些东西发生了变化,因为当我 4 个月前最后一次查看代码时并没有花这么长时间。
专家能否推荐一种方法来获得一些可见性以了解这里发生了什么?
更新:
注意到 UltraEdit(我的编辑器)第一次启动也需要 40 秒。我认为那里存在一些联系,因为这也从未发生过。
更新:
发现问题:是我的新 NetGear Stora NAS 导致了令人讨厌的网络超时问题。当我拔下它时,一切都开始像润滑的闪电一样工作。
愿一千只 Camel 的跳蚤感染负责那个史诗般的工程设计失败的驴脑家伙的腋窝。
最佳答案
- 在 40 秒等待期的早期,中断正在运行的进程(调试 → 全部中断)。
- 打开调用堆栈窗口(调试 → 窗口 → 调用堆栈)。
- 如果您将 MatLib 程序集用作外部库而不是解决方案中的项目,请右键单击Call Stack 窗口并在上下文中选择Show External Code菜单。
- 打开线程窗口(调试 → 窗口 → 线程)。
- 按照您的方式处理线程,一个一个地选择它们并查看调用堆栈 窗口。您应该能够从前几帧中看到每个线程在做什么——您应该能够看到在 MatLib 代码中的何处导致了延迟。 (等待句柄中的线程正在等待其他线程完成工作或空闲等待其他线程创建工作供它们处理。)
我的猜测 是库将尝试进行某种网络调用,而 40 秒是该调用的超时时间。您应该能够使用从上述步骤中学到的信息来追踪库中的问题。
关于c# - 加载 Matlab 程序集时流氓等待 40 秒......如何诊断原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5486674/