(读)文件I / O抖动

时间:2014-02-20 09:56:31

标签: c# file-io

我有一个执行多个readfile操作的应用程序(C#.Net 3.5和.Net 2.0)。但是,系统时不时会显示hickup(抖动)。我已经附加了VTune分析器并执行了锁定和等待分析,请参见下面的第一张图片。

锁定和等待分析显示“同步对象:流文件路径”导致应用程序在所有线程上被锁定(等待)。在此期间,CPU利用率降至0%。

接下来,我使用SysInternals Process Monitor记录发生hickup时执行的操作。它显示了一个大约需要的文件读取操作。 1秒,但只是偶尔(抖动)。见第二张图片。

enter image description here 单击大图像版本:here

File I/O jitter 单击大图像版本:here

我很困惑。什么可能导致文件I / O中的这种抖动?这是一个同步的阅读。我试图将读取缓冲区从32,768b减少到4096b,但这没有任何机会。也许需要注意的是,用于收集这些数字的机器有一个SSD。但是,我们在没有SSD的机器上看到类似的hickup。

欢迎任何寻找目标的线索。

1 个答案:

答案 0 :(得分:2)

这个问题需要更新。我会以答案的形式发布这个问题,因为我已经解决了这个问题,但我不能肯定地说出原始问题是什么。

我已经尝试了很多东西来找出导致IO读取(文件)持续时间偶尔出现峰值的原因。首先,病毒扫描仪很重要,特别是McAfee造成了一些麻烦。关于这个问题的评论已经在这里暗示,而且@remus rusanu使用WPA / WPR组合的提示也表明了这一点。 WPA / WPR组合令我高兴,并且是VTune和ProcMon的有用工具。第一张图片显示McAfee taskmanager在一些长时间刷新和读取开始之前的突然显示(> 1s)。第二个显示WPA中的所有信息都很好地链接到所有图形。如果在大海捞针中寻找那根针,这是一个很好的强大工具。

enter image description here 快速链接大版本:here

enter image description here 快速大版:here

然而,当我卸载virusscan软件时,仍然会出现峰值。较少,并且它们的持续时间较短,但在应用程序中仍然可见。我已经尝试了很多东西来找出它是什么。使用过VMWare设置,因此我可以完全剥离系统,看看是否有其他进程可能成为问题。最后,我放弃了。我实现了一个系统来解决这个问题,现在这已经足够了。知道我采取的所有行动,我会说还有另一个相互冲突的过程。另一种选择是链接的非托管程序,它使用互斥锁,可能会做一些有问题的东西。我将互斥锁更改为CriticalSections,但没有直接的可见结果,所以我放弃了这条路线。

总而言之,遗憾的是我没有直接的答案。由于时间限制,我被迫解决它,并且可能永远不会知道问题的根本原因是什么。我想这也是现实生活..

感谢所有提示,我学到了一些我将来肯定会使用的东西。