2011-05-09 65 views
3

你用什麼技術快速編譯和啓動VSC++項目?如何更快地編譯和啓動VSC++項目?

對我們來說,特別是所有DLL的加載需要很長時間。有沒有辦法加快這一點?該項目加載了大量的.dll,其中一些特別慢。

現在我們爲我們的項目使用統一構建,它已經非常快地編譯! =)

謝謝!

+0

「使用更少的DLL」是一個有效的解決方案嗎? – Blindy 2011-05-09 13:23:57

回答

4

DLL中嵌入了默認加載位置。這通常被開發工具默認爲所有DLL的相同地址。這意味着,當DLL被加載到內存中時,會發生很多衝突,並且DLL必須被重新編碼並加載到可用內存位置。在處理具有大量DLL依賴性的項目時,通過設置DLL的默認地址,我們可以節省大量的加載時間。

關於發生了什麼以及如何幫助的更全面的解釋可以在drdobbs找到。

我已經做了幾年了,所以它可能已經過時了。

值得記住的是,如果沿着這條路線走下去,它可能不會很好地與.net發揮。

+0

手動設置開始地址對地址佈局隨機化有任何影響嗎? – RedX 2011-05-09 15:25:56

+0

@RedX:我不知道。正如我所說,我已經做了幾年。基於一些快速閱讀,我猜如果你鏈接到啓用ASLR,它會忽略嵌入的地址,但它*是*猜測(我沒有追蹤到一個源)。如果您有興趣,可以在這裏詢問問題,看看有沒有人知道。 – forsvarir 2011-05-09 20:40:27

+0

@RedX:所有(代碼)DLL都設置了它們的加載地址。這是PE標題中的必填字段。重新綁定解決的問題是您已將它們全部設置爲相同的地址。 ASLR必須忽視該領域的工作。當然,ASLR的90%好處是通過隨機化系統DLL加載地址獲得的。 – MSalters 2011-05-10 09:18:14

2

使用延遲加載的庫。這是一個簡單的編譯設置更改(通常不需要更改代碼),但它可以提供非常大的改進。

當然,當你真正使用它們時,你仍然有這些DLL的加載時間,但是如果你有很多DLL,那麼你很可能不會一直使用它們。