0

我在 Visual Studio 中使用 Windows 窗体制作了一个工具,可以从长文本文件中搜索不同的关键字(线性搜索)。单击过滤器按钮后,它会随机冻结(说没有响应)。如果我在重新启动后尝试执行完全相同的步骤,它将正常工作。

我如何跟踪问题?断点无济于事,因为程序很大,我不知道应该把它们放在哪里。

此外,如果您让它保持冻结一段时间,它确实可以成功运行,然后在同一点再次开始冻结。

4

2 回答 2

2

连接一个性能分析器(如果它发生在几分钟内,perfmon 就可以工作)并观察一些重要的值,例如:

  • 垃圾收集所花费的时间
  • 大对象堆大小
  • 总堆大小
  • 逻辑线程数
  • 物理线程数
  • 磁盘活动

如果这些都没有指向任何明显的问题(例如大对象堆碎片或泄漏引用),那么您也可以在 Visual Studio 中暂停应用程序。例如,使用 Visual Studio 的 Run 按钮运行应用程序,然后当您的应用程序显示 时not responding,您可以按下 Visual Studio 的 Pause 按钮​​并打开线程窗口并了解导致问题的原因以及 UI 时正在运行的内容线程被阻塞了很长时间,以至于 Window 说它“没有响应”

于 2013-07-15T20:33:47.790 回答
2

当应用程序停止响应时,使用日志文件(或单独线程上的 UI 元素,具体取决于应用程序的类型)向您自己指示您正在处理文件的位置。重复运行应用程序并寻找与应用程序停止位置相关的模式。

  • 处理一定数量的文本后,应用程序是否会停止?
  • 应用程序是否停止在特定的字符组合上?
  • 当应用程序尝试处理具有特定特征(例如大小或复杂性)的元素时,它会停止吗?

在您收集了一些基本数据之后,您可以开始向您的日志中添加似乎与您所看到的模式相关的信息。写出诸如正在消耗多少内存等信息,以尝试缩小导致崩溃的特定模式。

日志文件是一种尝试获取有关应用程序状态、运行时状态以及崩溃发生时所采取的操作的信息的方法。

于 2013-07-15T21:13:21.133 回答