目前,我正在开发一个读写磁盘的MFC应用程序。有时这个应用程序运行的非常快,有时却慢得要命。我猜这是因为涉及到磁盘访问,因此我想对其进行分析。以下是这方面的一些问题:
(1)我正在使用AQTime profiler分析应用程序。有没有人尝试过用这个来分析磁盘访问?或者有没有其他可用的工具可供我使用?
(2)。我应该查看的最重要的磁盘参数是什么?
(3)。如果我有多个线程尝试从磁盘读取和写入数据,是否会影响性能?也就是说,对磁盘进行单线程访问是不是更好?
发布于 2009-04-21 18:42:57
为此,您可以使用Windows Performance Toolkit。您可以为磁盘I/O事件启用跟踪提供程序,并查看每个事件的I/O时间和磁盘服务时间。不过,它确实有一点学习曲线。这还可以让您确定哪些文件I/O实际上会导致对磁盘的实际访问,而不是由缓存管理器处理。
最重要的参数是磁盘服务时间和队列长度。磁盘服务时间是磁盘为请求提供服务所用的实际时间。Queue length指示您的磁盘请求是否备份在其他请求之后。
对于许多具有读写的线程-许多磁盘在面对具有后台写入的读取时的性能较差。如果您有多个线程对磁盘上的随机位置执行大量磁盘I/O操作,则可能会导致某些请求处于饥饿状态。
发布于 2009-04-21 18:50:58
为了帮助您(2):
希望这能帮上忙。
发布于 2009-04-23 00:01:56
我要做的是,如果你不能同时暂停所有线程并检查它们的状态,那么专注于其中一个线程,并在它“非常慢”的时候暂停它。This is a little known but effective technique.
由于它的速度比它可能的速度要慢得多,所以无论它在等待什么,它可能有99%的时间都在等待,所以当你暂停它时,你会看到它。无论是一个大的等待,还是无数的小等待,这都是真的。看看整个调用堆栈。罪魁祸首可能在堆栈的中间位置。
如果你不确定,暂停两到三次。罪魁祸首将在所有堆栈样本上。
https://stackoverflow.com/questions/773982
复制相似问题