我长时间使用后随机冻结的工具。我该如何追踪这个问题?

时间:2013-07-15 20:26:12

标签: c# visual-studio-2012

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

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

此外,如果你让它保持冷冻一段时间,它会成功运作,然后在同一点再次开始冻结。

2 个答案:

答案 0 :(得分:2)

连接性能分析器(如果在几分钟内发生,则会运行)并观察一些重要的值,例如:

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

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

答案 1 :(得分:2)

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

  • 在处理了一定数量的文字后,应用似乎停止了吗?
  • 应用程序是否停止使用某些字符组合?
  • 当应用尝试处理具有特定特征(例如大小或复杂程度)的元素时,该应用会停止吗?

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

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