Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何定位正在执行I/O的代码_C++_Windows_Performance_Debugging - Fatal编程技术网

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

C++ 如何定位正在执行I/O的代码,c++,windows,performance,debugging,C++,Windows,Performance,Debugging,我正在研究两个版本之间出现的性能问题(这是一个windows应用程序)。 我观察到的是,速度较慢的版本比前一个版本做了更多的I/O (我在process explorer中观察到了这一点(见下图))当另一个不执行任何操作或很少执行操作时,I/O与较少的cpu活动相关。因此,我猜测性能损失来自I/O 但是由于代码非常大,并且由不同的团队共享,所以很难发现更改了什么。此外,两个版本之间的差距也很重要。 从我所关心的这两个版本仍然应该是同一种工作。。。 因此,知道这个应用程序正在进行文件+数据库访问,

我正在研究两个版本之间出现的性能问题(这是一个windows应用程序)。 我观察到的是,速度较慢的版本比前一个版本做了更多的I/O (我在process explorer中观察到了这一点(见下图))当另一个不执行任何操作或很少执行操作时,I/O与较少的cpu活动相关。因此,我猜测性能损失来自I/O

但是由于代码非常大,并且由不同的团队共享,所以很难发现更改了什么。此外,两个版本之间的差距也很重要。 从我所关心的这两个版本仍然应该是同一种工作。。。 因此,知道这个应用程序正在进行文件+数据库访问,有人知道一种方法(或工具)来发现重要的I/O活动可能涉及到代码的哪一部分吗

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

非常感谢您的任何意见

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

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

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


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

使用一个合适的探查器来查看在哪里花时间做I/O或其他事情-我不使用Windows,但很明显,非常沉闷的探查器很好:我发现非常有用。这是一种非常通用且功能强大的技术(也适用于I/O)。不要妄下结论,认为这是由代码引起的。文件越是碎片化,数据库服务器也越是陷入困境。我忘了提到:我比较了两个版本,在同一硬件上托管了一个专用数据库。但你是对的,可能不是密码。这就是为什么我无论如何都需要找出涉及到哪些I/O的原因。使用一个合适的探查器来查看在哪里花时间做I/O或其他事情-我不使用Windows,但很明显,这个非常困倦的探查器很好:我发现它非常有用。这是一种非常通用且功能强大的技术(也适用于I/O)。不要妄下结论,认为这是由代码引起的。文件越是碎片化,数据库服务器也越是陷入困境。我忘了提到:我比较了两个版本,在同一硬件上托管了一个专用数据库。但你是对的,可能不是密码。这就是为什么无论如何我都需要找出其中涉及的I/O。