2014-09-23 35 views
0

我的代碼運行速度很慢,但我知道它不需要調試。我有一個第三方硬件連接到我的系統,它只在調試模式下工作(是的,真的很痛苦%$)。調試模式下的優化

所以我想打開我的功能的優化,但它使用調試正常模式和優化開啓之間的精確時間。

#pragma optimize("ts", on) 
void DataAnalyze::PrepareData(std::vector<short>& data, std::vector<short>& laserData, std::vector<std::vector<double>>& normalizedData) { 
... 
} 
#pragma optimize("ts", off) 

這是否只在釋放模式下工作才能關閉優化,或者我錯過了什麼?

+0

一個因素不能編譯使用優化標誌(例如,相當於gcc世界中的-O3)? – Claudio 2014-09-23 10:16:31

+0

msvc也有不同的標準庫實現。所以有一個優化版本的'std ::'類型和未優化的版本。嘗試鏈接到運行時的發行版。我不明白「附加到我的系統的第三方硬件只能在調試模式下工作」的含義。 – PeterT 2014-09-23 10:17:05

+0

通常,STL的調試版本已打開大量檢查。即使你對這段代碼進行了優化,檢查仍然會到位,並且比發佈時慢。 – Felics 2014-09-23 10:18:54

回答

0

閱讀實現這一評論是由STL造成的後,我轉而使用short*,而不是訪問向量,並加快了我的代碼由3

+0

它可能還沒有優化。你可能仍然可以使用該函數以外的向量來使你的代碼安全。矢量上的迭代器和索引運算符在調試中速度較慢,因此在高性能函數中,以「short * dataptr =&data [0];」的形式訪問數據,並且您可以獲得外部向量的優點以及未經檢查的數組索引的加速在你的功能。 (注意:打開優化的代碼應該比調試向量運行速度快10-1000倍) – BeyelerStudios 2014-09-23 12:35:01