目前我正在开发一个读取和写入磁盘的MFC应用程序。有时这个应用程序运行得非常快,有时候它很慢。我猜这是因为涉及磁盘访问,因此我想对其进行分析。这些是这方面的一些问题:
(1)。目前我正在使用AQTime 分析器来分析应用程序。有没有人试过使用它来分析磁盘访问?或者还有其他可用的工具吗?
(2)。我应该关注哪些最重要的磁盘参数?
(3)。如果我有多个线程试图从磁盘读取和写入数据会影响性能吗?即最好是对磁盘进行单线程访问?
答案 0 :(得分:2)
您可以使用Windows Performance Toolkit。您可以为磁盘I / O事件启用跟踪提供程序,并查看每个事件的I / O时间和磁盘服务时间。它确实有一点学习曲线。这也可以让您确定哪个文件I / O实际上导致实际访问磁盘,而不是由缓存管理器处理。
最重要的参数是磁盘服务时间和队列长度。磁盘服务时间是磁盘实际用于服务请求的时间。队列长度表示您的磁盘请求是否在其他请求后备份。
对于许多线程w / read&写道 - 许多磁盘在使用后台写入读取时表现不佳。如果您有各种线程对磁盘上的随机位置执行大量磁盘I / O操作,则可能会使某些请求无法使用。
答案 1 :(得分:1)
为您提供帮助(2):
希望这会有所帮助......
答案 2 :(得分:0)
我要做的是,如果你不能同时暂停所有线程并检查它们的状态,那就把注意力集中在其中一个线上并暂停它,而它是“该死的慢”。 This is a little known but effective technique.
由于它与它可能的速度相比非常慢,无论它等待它的时间大概是等待99%的时间,所以当你暂停它时你会看到它。无论是一次大的等待还是无数的小小的等待都是如此。看看整个调用堆栈。罪魁祸首可能在堆栈中间的某处。
如果您不确定,请暂停两到三次。罪魁祸首将在所有堆栈样本上。