【发布时间】:2010-03-15 22:30:25
【问题描述】:
我有一个特殊的组合框,其中包含很长的项目列表(几千个),当您打开它时必须计算这些列表。当我在测试某个东西时,我惊恐地发现它需要大约一分钟才能打开。所以我将程序(相同的构建,相同的选项)连接到 Sampling Profiler 以查看花费了这么长时间,并且只花了大约 5 秒就打开了。我尝试直接从 Windows 运行它,这次只用了 2-3 秒,这是我的预期。
那么,当 Delphi 调试器连接到它时,为什么完全相同的 EXE 处理数字要慢 25 倍以上呢?这不像被评估的条件断点那样明显。似乎只有调试器的存在正在减慢它的速度。有谁知道为什么?
【问题讨论】:
-
它是否产生了大量的调试输出(OutputDebugString)?事件日志中显示了什么?
-
@Craig:是的。非常好的通灵调试!每次紧密循环迭代都会调用 OutputDebugString 两次。把它作为答案,我会接受的。
-
OutputDebugString 就像一个断点:它将字符串放在事件日志中,并强制它滚动所有隐含的处理......
-
您可能想要使用真正的日志工具而不是 OutputDebugString,因为 Delphi 对 OutputDebugString 的支持非常慢(我相信这主要是由于 Delphi 如何为每个日志条目绘制/刷新其事件列表)。您可以查看我们的 SmartInspect 日志记录工具,但任何现代日志记录系统都应该是一个巨大的改进。
标签: delphi debugging delphi-2010 slowdown