目前我正在开发一个读取和写入磁盘的 MFC 应用程序。有时这个应用程序运行得非常快,有时它运行得非常慢。我猜这是因为涉及到磁盘访问,因此我想对其进行分析。这些是这方面的一些问题:
(1).目前我正在使用AQTime分析器来分析应用程序。有没有人尝试过使用它来分析磁盘访问?或者我可以使用任何其他可用的工具吗?
(2)。我应该查看哪些最重要的磁盘参数?
(3)。如果我有多个线程试图从磁盘读取和写入数据,它会影响性能吗?即我最好对磁盘进行单线程访问吗?
您可以为此使用Windows 性能工具包。您可以为磁盘 I/O 事件启用跟踪提供程序,并查看每个事件的 I/O 时间和磁盘服务时间。不过,它确实有一点学习曲线。这还可以让您确定哪些文件 I/O 实际导致对磁盘的实际访问,而不是由缓存管理器处理。
最重要的参数是磁盘服务时间和队列长度。磁盘服务时间是磁盘实际服务请求所花费的时间。队列长度指示您的磁盘请求是否在其他请求之后备份。
对于具有读取和写入功能的许多线程 - 许多磁盘在面对具有后台写入的读取时性能很差。如果您有不同的线程对磁盘上的随机位置执行大量磁盘 I/O,您可能最终会饿死某些请求。
我要做的是,如果您不能同时暂停所有线程并检查它们的状态,请专注于其中一个并暂停它,而它“非常慢”。这是一个鲜为人知但有效的技术。
由于它与可能的速度相比非常慢,因此无论它在等待什么,它都在等待大约 99% 的时间,所以当你暂停它时,你会看到它。无论是一次大等待,还是无数次等待,都是如此。查看整个调用堆栈。罪魁祸首可能在堆栈中间的某个地方。
如果您不确定,请暂停两到三遍。罪魁祸首将出现在所有堆栈样本上。
为了帮助您(2):
希望这会有所帮助....