当我调试我的应用程序时,需要读取一个大的原始图像文件(800MB)。我发现当我打开IntelliTrace时应用程序是如此之慢。
我发现IntelliTrace的IO太高了,但我不知道如何找到真正的原因'为什么intelliTrace使我的应用程序变得如此缓慢39; 。当我读取大原始图像文件时,为什么intelliTrace会向 .iTrace 文件写入这么多信息。
请给我一个帮助,
答案 0 :(得分:0)
InteliTrace记录了应用程序经历的所有步骤。因此疯狂的I / O.
来自Wikipedia:
与传统调试器不同,它只记录当前活动的调试器 stack, IntelliTrace记录所有事件,例如先前的函数调用, 方法参数,事件和例外。这允许代码 如果断点没有设置在哪里,则执行要重绕 发生错误。[114]使用IntelliTrace进行调试将导致 应用程序比没有它的调试运行更慢,并将使用 因需要记录额外数据而需要更多内存。
为了让您在调试过程中回溯,它会记录内存的更改方式和时间,以便在您退回代码时将其恢复到以前的状态(而不是只能向前推进的经典调试器)。
通过处理800MiB的数据,你几乎强迫IntelliTrace记录它通过内存的方式,以及你在解码过程中使用的所有变量(乘以你改变它的时间 - 例如。循环长度)。
InteliTrace中缓慢调试问题的答案是限制它节省甚至更好地创建测试环境。您可以尝试进行单元测试和/或测试数据文件(远远小于当前的blob)。
答案 1 :(得分:0)
IntelliTrace不记录内存状态。它记录发生的事件。事件我指的是函数调用或异常。您可以配置要收集的事件(Tools / Options / IntelliTrace / IntelliTraceEvent)以及要收集的数据量(" IntelliTrace Events"或" IntelliTrace事件和呼叫信息"在工具/选项中/智能跟踪)。它无法自由收集数据。性能取决于要收集的事件,数据量以及程序中生成的事件数量。所以你可以在开始调试之前进行权衡。例如,如果您不关心文件访问事件,请将其关闭。即使您的程序生成了许多此类事件,也不会收集和存储它们。