【问题标题】:How to get the CPU time of Delphi program?如何获取Delphi程序的CPU时间?
【发布时间】:2015-03-25 09:12:28
【问题描述】:

我要解决的问题:我的程序使用System.Win.ScktComp.TServerSocket 通过以太网与另一个本地进程通信。从本地进程接收数据包和发送响应之间是 100 毫秒——这不应该花这么长时间。我正在尝试使用调试器单步执行我的程序,以查看这 100 毫秒的花费。

问题是,如果我在调试器中获取当前时间,它显然会计算它在调试器暂停状态下花费的时间。另一个问题是我的应用程序的相关部分是TTimer 并且是事件驱动的,因此当例程返回时,您不确定接下来会调用哪个例程。

我的尝试:我可以放弃在任何地方使用调试器和print当前时间,例如在所有OnTimer过程和其他事件中。

更好的解决方案: 逐步调试调试器,获取 CPU 时间(不受在调试器中暂停所用时间的影响)以确定 100 毫秒丢失的位置.

【问题讨论】:

  • 不,尝试在调试时为您的应用计时不会产生有意义的结果。使用分析器或一些日志记录代码对此进行检测。
  • 我会试试 procmon。启动 Procmon,启动您的应用程序,执行您的操作,停止 procmon,打开工具 -> 堆栈摘要并深入了解您的应用程序。 (在过滤器菜单中启用高级输出) 如果这还不够精细,您可以使用WPA (尽管学习曲线更陡峭)
  • 由于您使用的是 Delphi XE2,因此您可以访问一些 CodeSite 日志记录,通过计时来实现它,它对您的运行时间的影响应该可以忽略不计。这样,您还可以在需要时查看所有输出的更多信息
  • 使用System.Diagnostics.TStopWatch 高级记录来衡量时间。通过 OutputDebugString 输出到日志系统。
  • 你可以做到,但我怀疑它会给你带来很好的结果。随意按照您喜欢的方式进行操作。我个人会使用仪器和日志记录。如果您希望在单步调试器中手动执行此操作,那完全取决于您。

标签: delphi debugging time delphi-xe2


【解决方案1】:

我不相信您以正确的方式解决您的问题,并且在 cmets 中已经说明了这一点。撇开这个不谈,您要求的功能是GetProcessTimes

【讨论】:

    【解决方案2】:

    我正在尝试...查看这 100 毫秒的花费。

    调试器无法轻易告诉您。您需要改用分析器,例如 AQTime 或类似工具,让它实时为您的代码计时并报告结果,例如在特定函数和类方法上花费了多少时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2017-10-10
      • 2013-02-17
      • 2020-12-26
      相关资源
      最近更新 更多