2010-08-30 121 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上運行