【问题标题】:An app that normally starts in 3 secs takes 3 mins to start straight after booting - why?通常在 3 秒内启动的应用程序在启动后需要 3 分钟才能直接启动 - 为什么?
【发布时间】:2011-12-20 22:57:57
【问题描述】:

我知道这个问题的简单答案,但我很难找到详细信息来指导我找到解决方案。

我的(C++、MFC)应用程序是从包含数 GB 和数万个文件的文件夹中运行的。开机后,最多可能需要 3 分钟才能启动,但如果您退出它并在之后的任何时间重新启动,则只需 2-3 秒即可启动。如果我从一个空文件夹结构运行我的应用程序,无论我何时运行它,它都会快速启动。

我看不到 Windows 在缓慢启动期间花费了大量系统时间并且没有给我的应用处理器时间,但它很可能会这样做。所以真正的问题是:

  • 我怎么知道是不是我的应用程序特别花时间...而不是我的应用程序通常第一次访问一个文件夹,因此 Windows 做了很多耗时的额外工作我的应用永远无法控制?
  • 如果我的应用程序没有任何问题,我该如何重新排列我的文件/文件夹结构,或更改 Windows 设置,以最大限度地减少 Windows 花费的时间?换句话说...我在哪里可以找到有关 Windows 在启动后第一次遇到文件夹时会做什么的信息?

我运行的是 Windows XP Professional,但无法轻易判断我拥有的主板、硬盘等是否会有所不同。

【问题讨论】:

  • 文件系统缓存是一个极好的加速器。修复磁盘。
  • 上述评论的预期帮助程度:10。实际帮助程度:1。原因:如果我知道“修复磁盘”是什么意思,我不会问这个问题。
  • @omatai:Hans 可能意味着获得更快的磁盘。如果您的文件夹中的文件与您所说的一样多,则速度缓慢可能是资源管理器尝试枚举所有文件。假设 Windows 在启动时没有因启动垃圾而陷入困境,Windows 通常启动得非常快。
  • 等一下。 Windows 不会傻到一看到 C: 就舔嘴唇,然后去枚举整个磁盘上的所有文件。它有限制——也许它只搜索 N 个文件夹。了解这些限制是什么(什么是 N?)会很有帮助。我的应用程序不需要始终可以访问所有文件和文件夹。所以....当然,如果我能理解 Windows 正在做什么,我可以修复文件结构,并为自己节省大量时间和 $$,而这些时间和 $$ 会因“修复磁盘”而浪费。启动时启动的其他应用程序启动正常。磁盘不是问题。

标签: windows image visual-c++ mfc


【解决方案1】:

应用程序目录是特殊的。例如,它是加载 DLL 时搜索的第一个目录。在包含数万个文件的目录中搜索 DLL 可能会比在大部分为空的目录中搜索 DLL 慢。

第二次更快,因为此时目录的内容已经加载到磁盘缓存中。

我对您的第二个问题有点困惑,因为您在写“如果我从空文件夹结构运行我的应用程序,无论我何时运行它,它都会快速启动”时回答了这个问题。但我会重复一遍:“将不必要的垃圾从你的应用程序目录中取出。”

【讨论】:

  • Windows 在应用程序目录中搜索 DLL 的深度有多深?此目录中可能有 50 个文件和文件夹......但这些文件夹最终包含数万和千兆字节的文件。
  • 仅应用程序目录本身。它不搜索子目录。 (检查你的 PATH,也许你的 PATH 上有一些大目录?)
猜你喜欢
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多