【问题标题】:how to find out what is causing I/O in my application?如何找出导致我的应用程序中的 I/O 的原因?
【发布时间】:2011-05-04 18:21:06
【问题描述】:

下午好,

我从几年前继承了一些 C# 代码。我已经将它重构为异步的。 评估我的更改对 CPU 性能的影响,我使用Process Explorer 大致观察我的应用程序在做什么。 令我惊讶的是,它似乎正在执行 Process Explorer 报告为 I/O 的操作。通常,这与磁盘 I/O 或网络 I/O 有关。 根据我对代码的了解,我无法确定对这两个 I/O 源中的任何一个的显式调用。

我的问题是:识别哪个代码段导致 I/O 的最佳方法是什么?我们使用 JetBrains 的 dotTrace 来分析我们的应用程序,但是,据我所知,它只处理 CPU 和内存性能。

提前感谢您的任何指点。

问候,

埃里克。

【问题讨论】:

    标签: c# windows profiling process-explorer


    【解决方案1】:

    进程监视器可能是您的答案。有关详细信息,请参阅以下 StackOverflow 问题。

    How can I profile file I/O?

    基于该答案,您可以在解决方案中搜索使用 Process Monitor 找到的任何常用读取或写入文件的文件名。

    【讨论】:

    • +1。我发现 Process Activity Summary 功能对于一目了然地查看访问次数最多的文件非常有用。
    • 非常感谢。虽然它没有显示我的代码的哪一部分正在执行此操作,但当我看到正在访问哪个文件时,我就确定了它。感谢您的帮助。
    【解决方案2】:

    stackshot method(也称为随机暂停)会找到它,如果它需要很长时间。

    【讨论】:

      【解决方案3】:

      如果 I/O 代码是托管的,您可以加载 .net 框架的符号并在关键函数中设置断点(例如 FileStream 构造函数等)

      它涉及一些猜测工作,但如果你成功了,它可以提供信息。

      【讨论】:

        【解决方案4】:

        除了进程监视器之外,我发现 Win7 上的资源监视器(我认为在 Vista 上的“性能和可靠性”下也可用)对于诊断与 I/O 相关的减速非常有用。切换到磁盘视图并按读/写或总计排序(仅限 win7)。还要留意出现的文件列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-31
          • 1970-01-01
          • 2010-12-08
          • 2017-03-24
          • 2019-01-30
          • 2010-10-15
          • 2014-01-17
          相关资源
          最近更新 更多