gpt4 book ai didi

c++ - 如何定位正在执行 I/O 的代码

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:05 26 4
gpt4 key购买 nike

我正在查看两个版本之间出现的性能问题(这是一个 Windows 应用程序)。我观察到的是,较慢的版本比前一个版本做更多的 I/O(我用进程浏览器观察到这一点(见下图))当另一个不做或很少做时,I/O 与较少的 cpu 事件相关。所以我猜测性能损失来自 I/O。

但是由于代码相当大,并且由不同的团队共享,所以不容易发现发生了什么变化。此外,两个版本之间的差距也很重要。从我的角度来看,这两个版本应该仍然是同一种工作......所以知道这个应用程序正在执行文件 + 数据库访问,是否有人知道一种方法(或工具)来发现代码的哪一部分可能涉及重要的 I/O 事件?

我尝试了一些分析器 (ltprof),但到目前为止运气不太好。我已经尝试进行一些统计调试(每隔几秒暂停一次)以查看调用堆栈是什么),但由于 I/O 似乎只占进程的一小部分(比如说少于 < 15%),到目前为止我还没有找到任何相关的东西。

非常感谢任何想法。

enter image description here

最佳答案

Process Monitor来自 Sysinternals(现在是 Microsoft 的一部分)的日志将创建一个进程(或多个进程)执行的所有 I/O 操作的日志。它可能会为您提供有关所有额外 I/O 是什么的线索,但不会将您指向代码的特定部分。您可以将日志与更快版本的日志进行比较,看看有什么不同。您也许还能够发现模式(例如冗余工作,或者从后到前而不是从前到后编写)。

如果总 I/O 大致相同,则问题可能是锁争用而不是 I/O。

关于c++ - 如何定位正在执行 I/O 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com