![如何诊断使用 Zend Studio 时完成“搜索文件中的字符串”所需时间大幅变慢的原因?](https://linux22.com/image/1502236/%E5%A6%82%E4%BD%95%E8%AF%8A%E6%96%AD%E4%BD%BF%E7%94%A8%20Zend%20Studio%20%E6%97%B6%E5%AE%8C%E6%88%90%E2%80%9C%E6%90%9C%E7%B4%A2%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E2%80%9D%E6%89%80%E9%9C%80%E6%97%B6%E9%97%B4%E5%A4%A7%E5%B9%85%E5%8F%98%E6%85%A2%E7%9A%84%E5%8E%9F%E5%9B%A0%EF%BC%9F.png)
我经常使用软件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 中正确设置过滤器,它会有所帮助。你需要为你的进程(你的可执行映像)设置一个过滤器,这样它就只能捕获你的软件正在做的事情。
通过分析磁盘和注册表访问,有时您可以找到一些有关问题的信息。