2010-08-30 126 views
2

问题的运行:步骤涉及一个exe

当我们运行一个可执行文件(通过双击假设),其中实际开始执行之前,所有的时间都花在?

a)将exe加载到内存中
b)?
c)?

背景问题的:

我在分析应用程序(APP.EXE)的执行,并努力提高其性能。我有一个测试,确实是这样的:

STARTTIME = beginTimer()
“开始APP.EXE”
“等到一个窗口变得敏感” - APP.EXE在这段时间内执行,并启动一个窗口
ENDTIME = endTimer()
outputValue =结束时间 - 开始时间

我已经在APP.EXE不同的地方,以获得在不同阶段所花费的执行时间加到时间标记,并且还获得APP.EXE的总执行时间。

我注意到“outputValue”约为5秒,其中执行App.exe所花费的总时间(从exe中的时间戳获得)约为2秒。

在我看来,大约3秒已经花在App.exe之前,甚至实际开始执行。该exe的大小约2700 KB。

+0

它是一个“正常”的.exe或.Net程序吗? – Tokk 2010-08-30 11:58:42

+0

它是否正在扫描病毒? – Jaydee 2010-08-30 12:04:16

+0

@Jayydee:它没有得到病毒扫描。 @Tokk:这是一个普通的exe程序。 – 2010-08-30 12:10:38

回答

1

这应该是这样的(只是猜测,操作系统场前一段时间)

  1. 映射到内存
  2. 加载链接的共享库(DLL)和它们连接的共享库
  3. 进程创建
  4. 实例化/创建静态对象和其他东西之前主函数
  5. [也许加载资源,不知道是否Windows id做到这一点]
  6. C/C++ - main-Funktion之前的Library-Methods
  7. starting main-Function。

4和6可能会在一起。

+0

值得一提的是,Windows不会一次加载整个可执行文件到内存中,而是根据需要加载需求页。这不是很明显,如果你不熟悉内存映射:) – snemarch 2010-08-30 12:22:45

0

应用程序可能很小,但它有可能引用了很多库。

  1. 从驱动
  2. 写入存储器读取
  3. 加载DLL和相关文件(从驱动器读出)
  4. 写入存储器
  5. 创建过程和执行程序逻辑

观光你可以改善它:

  • 在启动程序中,删除所有未包含的内容
  • 确保程序编译时没有调试信息。在Visual Studio中,它是“释放”而不是“调试”。如果项目在启动时读取数据库和/或文件,这很可能是问题出在哪里
  • 这是一个.NET应用程序,请确保它在最新的.NET Framework上运行