如何获取应用程序从文件系统读取/写入文件所花费的总时间?

Posted

技术标签:

【中文标题】如何获取应用程序从文件系统读取/写入文件所花费的总时间?【英文标题】:How to get the total time an application spends on reading/writing from/to the file system? 【发布时间】:2010-09-29 02:18:09 【问题描述】:

我现在正在分析一个执行大量磁盘 I/O 的应用程序。

此时,我想知道在磁盘 I/O 上花费了多少时间。这样,我就可以将 I/O 和整个执行时间进行比较,以决定下一个优化目标。

简而言之,我正在寻找工具或方法来:

    计算并汇总我的应用程序的磁盘 I/O 操作的总时间。 堆栈跟踪不是强制性的,但很有帮助 适用于 Windows 或 OSX。

我无法控制执行磁盘 I/O 操作的组件。所以我无法在我的应用程序中添加分析代码来手动记录 I/O 时间。

我已经尝试过 Xcode Instruments 的 time profiler。但它太重了。我只想要 I/O 操作的摘要时间。

谢谢

【问题讨论】:

【参考方案1】:

在 Windows 上使用 XPerf 可以详细地告诉您有关文件 I/O 时间的详细信息。您也可以使用它来获取堆栈跟踪 - Michael Milrud 有一个关于使用 XPerf 的精彩 PDC09 视频。

【讨论】:

Xperf 还可以让您查看系统上的其他磁盘活动,以了解磁盘 I/O 缓慢的原因。并且,它区分调用花费了多长时间,以及其中有多少是磁盘处理请求而不是请求在队列中等待。这种区别对于负载很重的系统至关重要。【参考方案2】:

我曾经为 Win32 下的 ReadFile/WriteFile 写过一些简单的钩子。您只需从 main 调用 init() 函数,整个过程的调用将被拦截。 我只是不知道如何发布它们,因为它们很大。

【讨论】:

以上是关于如何获取应用程序从文件系统读取/写入文件所花费的总时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过读取文本文件中提到的日期计算到今天的总天数?

如何写入/读取“设置”文本文件

如何锁定文件并避免在写入时读取

如何从 RODBC 读取 300 万条记录并写入文本文件

如何在 iOS 中使用 NSKeyedArchiver 将已写入文件系统的 Flutter 中的文件作为字符串读取?

如何计算多个 android webview 所花费的总时间?