0

当我调试我的应用程序时,它需要读取一个大的原始图像文件(800MB)。当我打开 IntelliTrace 时,我发现应用程序很慢。

我发现 IntelliTrace 的 IO 太高,但我不知道如何找到真正的原因“为什么 intelliTrace 让我的应用程序这么慢”。为什么 intelliTrace 将这么多信息写入 .iTrace文件,当我阅读大原始图像文件。

请给我一个帮助,

智能追踪

4

2 回答 2

0

InteliTrace 记录应用程序经历的所有步骤。因此疯狂的 I/O。

来自维基百科

与仅记录当前活动堆栈的传统调试器不同,IntelliTrace 记录所有事件,例如先前的函数调用、方法参数、事件和异常。这允许在发生错误的地方未设置断点的情况下重新执行代码。 [114] 使用 IntelliTrace 进行调试将导致应用程序运行比不使用它进行调试更慢,并且将使用更多内存,因为需要记录额外的数据。

为了允许您在调试过程中回溯,它记录了内存更改的方式和时间,以便在您退回代码时将其恢复到以前的状态(与只能前进的经典调试器相反)。

通过处理 800MiB 的数据,您几乎可以强制 IntelliTrace 记录它如何通过内存,以及您在解码期间使用的所有变量(乘以您更改它的时间 - 例如循环长度)。

InteliTrace 中调试缓慢问题的答案是限制它保存的内容,甚至更好地创建测试环境。您可以尝试制作单元测试和/或测试数据文件(比您当前的 blob 小得多)。

于 2014-09-30T06:33:04.860 回答
0

IntelliTrace 不记录内存状态。它记录发生的事件。我所说的事件是指函数调用或异常。您可以配置要收集的事件(工具/选项/IntelliTrace/IntelliTraceEvent)以及要收集的数据量(“仅 IntelliTrace 事件”或“工具/选项/IntelliTrace”中的“IntelliTrace 事件和调用信息”)。收集数据不是免费的。而性能取决于要收集哪些事件、有多少数据以及在程序中生成了多少此类事件。因此,您可以在开始调试之前进行权衡。例如,如果您不关心文件访问事件,请将它们关闭。即使您的程序生成了许多此类事件,它们也不会被收集和存储。

于 2015-04-12T00:57:38.763 回答