我有一些大中型項目正在積極使用boost
庫,因此在調試應用程序性能(Visual Studio 2008)方面受到影響。C++優化問題
我現在使用的解決方案意味着即使在調試模式下打開函數內聯,這會帶來足夠的性能,但肯定會有一些缺點。
有沒有人知道如果我強制功能內聯(/Ob2
)開關,我將在調試功能方面失去什麼?
也許有人有關於加快boost /其他模板庫的任何其他想法調試性能?
我有一些大中型項目正在積極使用boost
庫,因此在調試應用程序性能(Visual Studio 2008)方面受到影響。C++優化問題
我現在使用的解決方案意味着即使在調試模式下打開函數內聯,這會帶來足夠的性能,但肯定會有一些缺點。
有沒有人知道如果我強制功能內聯(/Ob2
)開關,我將在調試功能方面失去什麼?
也許有人有關於加快boost /其他模板庫的任何其他想法調試性能?
在我看來,你應該可能而不是是性能測試你的調試版本。
保存單元測試的調試版本,以便您可以輕鬆找到問題,但真正的測試(功能和性能)應該可能在發佈版本上。
這就是你的客戶將會運行的所有,對吧?
+1。調試版本通常包含大量的偏執檢查,這些檢查耗費大量時間。 – sharptooth 2010-07-14 12:51:28
在遊戲編程中,常見問題是您經常需要調試模式來運行速度足以幫助您調試遊戲。在這種情況下,你的答案無濟於事。但是,如果它在Debug中運行得「速度足夠快,可以調試」,並且在Release中效果更好,那麼你是對的:優化只有在Release中才有意義。 – Klaim 2010-07-14 13:08:33
我建議調試在Debug模式下構建的應用程序,並在內置Release模式時使用它(用於性能測試,一般用法等)。這樣你就不用擔心在調試時丟失任何東西。
無論如何,打開Debug中的函數內聯可能會在遍歷代碼時遇到調試器,並且遇到對內聯函數的函數調用。但我從來沒有測試過,所以我不確定。
在Debug和Release配置中使用/Ob2
。因此,當您調試它時,它的行爲將與釋放模式下的行爲相同。
我同意以前的答案,你不應該真的關心調試版本的性能。測試在那裏,因爲我們需要他們...
但是,我是一個務實的程序員,並有一個原因,我不使用valgrinded應用程序來運行我的測試:我不希望他們太慢無論如何,因爲該系統在這一點上變得完全不切實際。
我沒有看到啓用內聯的任何錯誤,確保調試器可能會挑出產生代碼的代碼的位置,但它不會修改代碼本身。
我也看到了部分調試版本。這個想法是關閉那些真正癱瘓程序的調試功能(如迭代器檢查),以便性能仍然可以接受。如果您確定哪些調試功能會降低速度,它可能會幫助您。這就是說,我從來沒有遇到性能問題,但隨後我使用gcc進行編譯,我不知道內聯是保留還是不在調試中。
用於部分調試版本的+1。在刪除'assert'之前,我創建了一個fast_debug目標,並關閉了邊界/迭代器檢查。它並沒有內聯。 – KitsuneYMG 2010-07-14 14:12:21
你有沒有簡介該計劃?如果它寫得不是最理想的呢? – sharptooth 2010-07-14 12:44:25
@sharptooth我正在分析我的應用程序的'Render'方法,並認爲'boost'方法有很多assert語句可以很容易地將150 fps減少到15 =) – 2010-07-14 13:41:12