首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析磁盘访问

分析磁盘访问
EN

Stack Overflow用户
提问于 2009-04-21 18:36:18
回答 3查看 1.6K关注 0票数 5

目前,我正在开发一个读写磁盘的MFC应用程序。有时这个应用程序运行的非常快,有时却慢得要命。我猜这是因为涉及到磁盘访问,因此我想对其进行分析。以下是这方面的一些问题:

(1)我正在使用AQTime profiler分析应用程序。有没有人尝试过用这个来分析磁盘访问?或者有没有其他可用的工具可供我使用?

(2)。我应该查看的最重要的磁盘参数是什么?

(3)。如果我有多个线程尝试从磁盘读取和写入数据,是否会影响性能?也就是说,对磁盘进行单线程访问是不是更好?

EN

回答 3

Stack Overflow用户

发布于 2009-04-21 18:42:57

为此,您可以使用Windows Performance Toolkit。您可以为磁盘I/O事件启用跟踪提供程序,并查看每个事件的I/O时间和磁盘服务时间。不过,它确实有一点学习曲线。这还可以让您确定哪些文件I/O实际上会导致对磁盘的实际访问,而不是由缓存管理器处理。

最重要的参数是磁盘服务时间和队列长度。磁盘服务时间是磁盘为请求提供服务所用的实际时间。Queue length指示您的磁盘请求是否备份在其他请求之后。

对于许多具有读写的线程-许多磁盘在面对具有后台写入的读取时的性能较差。如果您有多个线程对磁盘上的随机位置执行大量磁盘I/O操作,则可能会导致某些请求处于饥饿状态。

票数 2
EN

Stack Overflow用户

发布于 2009-04-21 18:50:58

为了帮助您(2):

  1. 会尝试批量写入磁盘,以避免许多小的写入调用。刷新完缓冲区后,调用commit。提交(又名fsync)是一个开销很大的操作,所以当有很多小的写操作时就更是如此。在windows文件句柄上的
  2. 你可以尝试使用 FILE FLAG WRITE THROUGH 来提高写速度。
  3. 如果你正在写入磁盘的数据也将通过读取来访问,请考虑先写入内存结构,让另一个线程从该结构中读取数据以将其写入磁盘。这将有助于避免调用从磁盘读取您刚刚写入的数据。

希望这能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2009-04-23 00:01:56

我要做的是,如果你不能同时暂停所有线程并检查它们的状态,那么专注于其中一个线程,并在它“非常慢”的时候暂停它。This is a little known but effective technique.

由于它的速度比它可能的速度要慢得多,所以无论它在等待什么,它可能有99%的时间都在等待,所以当你暂停它时,你会看到它。无论是一个大的等待,还是无数的小等待,这都是真的。看看整个调用堆栈。罪魁祸首可能在堆栈的中间位置。

如果你不确定,暂停两到三次。罪魁祸首将在所有堆栈样本上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/773982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档