如何诊断使用 Zend Studio 时完成“搜索文件中的字符串”所需时间大幅变慢的原因?

如何诊断使用 Zend Studio 时完成“搜索文件中的字符串”所需时间大幅变慢的原因?

我经常使用软件Search内部的函数Zend Studio(它建立在 之上Eclipse)。我经常使用它。大概每天 10-100 次。

当我使用搜索在项目内的某个文件中查找字符串时,我遇到了搜索时间的神秘变化。通常只需一秒钟即可完成搜索请求。但有时需要 10-20 秒,这就是我要解决/诊断的问题。

我做什么:

  • 按 Ctrl-H(打开搜索菜单)
  • 输入我的搜索字符串
  • 按搜索
  • 通常需要大约 1 秒或更短的时间,但有时需要 10-20 秒(这就是问题所在)

我所看到的

在此处输入图片描述

这种现象偶尔会发生,并非总是发生,但仍然经常发生。

我尝试过的:

我努力了

  • 限制Working Set到特定的子文件夹
  • 限制File name patterns为特定文件扩展名
  • 对我的驱动器进行碎片整理
  • 防病毒软件似乎未进行扫描
  • 使用诸如这样的工具Process Monitor并不能收集太多信息。例如,上次我发现它时,我认为它svchost似乎发出了很多文件读取请求,但这并没有告诉我太多信息。

问题

如何诊断搜索速度变慢的原因?

统计资料

5461 个文件,352 个文件夹,磁盘上文件总大小为 139Mb

使用进程监视器的更新

我使用 ProcMon 进行了两次搜索 - 第一次很慢,第二次很快。第一次搜索运行了 40 秒,也就是说慢的。第二次搜索耗时 1.8 秒,又名快速地。第一次搜索速度很慢,在我有一段时间没有使用搜索后,它又运行得很快。

我对慢速和快速搜索事件进行了差异分析,并在所有CreateFile, QueryDirectory, Close File, ReadFile, QueryStandardInformationFile操作中两个都运行,两次运行之间的差异是 - 慢速运行额外增加了 2,649 行,类似于:

Process Name: ZendStudio.exe
Operation: ReadFile
Path: jpgraph\src\jpgraph_plotband.php
Result: SUCCESS
Detail: Offset: 0, Length: 8,192, I/O Flags: Non-cached, Paging I/O, Priority: Normal

我对搜索速度慢的原因的猜测

我猜第一次可能确实读取了文件,但第二次会将它们完全缓存在某个地方,这就是速度差异的原因。我猜第一次读取所有文件确实需要大约 40 秒,而当它们被缓存时,再次完整读取它们只需要 2 秒。

从这个意义上来说,缓存解释了这种令人难以置信的巨大速度差异。然而,我想知道,如果我有一个速度慢、老旧或碎片严重的驱动器,搜索会花 40 秒,因为我无法想象缓慢的搜索时间是否在可接受的范围内。

答案1

丹尼斯

过去我遇到过类似您的问题,我使用 Sysinternals 的 Process Monitor 来诊断我的问题。由于此软件显示了 Windows 上“幕后”发生的所有事情,因此也许它可以为您提供帮助。

通过这种方式找到解决方案有点困难,但如果你有耐心并在 Procmon 中正确设置过滤器,它会有所帮助。你需要为你的进程(你的可执行映像)设置一个过滤器,这样它就只能捕获你的软件正在做的事情。

通过分析磁盘和注册表访问,有时您可以找到一些有关问题的信息。

相关内容