如何找到正在进行I / O的代码

时间:2011-04-06 15:59:37

标签: c++ windows performance debugging

我正在查看两个版本之间出现的性能问题(这是一个Windows应用程序)。 我观察到的是,速度较慢的版本比前一版本的I / O更多 (我已经使用进程资源管理器(见下图)观察到这一点)当另一个没有或很少时,I / O与较少的cpu活动相关。所以我猜测性能损失来自I / O.

但由于代码非常庞大,并且由不同的团队共享,所以要发现变化的内容并不容易。而且两个版本之间的差距也很重要。 从我所关心的这两个版本应该仍然是同样的工作...... 所以知道这个应用程序正在进行文件+数据库访问,是否有人知道一种方法(或工具)来发现可能涉及重要I / O活动的代码部分?

我尝试了一些分析器(ltprof)但到目前为止没有太多运气。 我尝试做一些统计调试(暂停每隔几秒)以查看callstack是什么),但由于I / O似乎占用了该过程的一小部分(比如少于< 15%), 到目前为止,我还没有发现任何相关内容。

任何想法都非常感激。

enter image description here

1 个答案:

答案 0 :(得分:1)

来自Sysinternals(现在是Microsoft的一部分)的

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

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