根據這裏和別處發現的帖子,我試圖通過設置_NO_DEBUG_HEAP
,_SECURE_SCL
和_HAS_ITERATOR_DEBUGGING
符號來加速VS 2012調試(本地C++,STL)。在VS 2012中調試STL
沒有運氣。
我寫了一個最基本的測試程序,它解析一個大的文本文件(100,000行,100列),並...
輸出在釋放模式:在調試模式下
read 102595 lines in 6.051 seconds
輸出:
read 102595 lines in 317.979 seconds <== 50x slower, ouch !!!
下面是完整的源代碼(C++控制檯應用程序,沒有預編譯頭)。 #define語句沒有任何作用。調試速度仍然難以忍受。有什麼建議麼?
// testAppDebugSTL.cpp : Defines the entry point for the console application.
//
#ifdef _DEBUG
#define _SECURE_SCL 0
#define _HAS_ITERATOR_DEBUGGING 0
#define _NO_DEBUG_HEAP 1
#endif
#include <string>
#include <vector>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
int main(int argc, char** argv[])
{
std::ifstream f ("c:\\temp\\largeFile.csv");
std::vector<std::string> lines;
std::vector<std::vector<std::string> > tokenized_lines;
size_t num_lines = 0;
clock_t tBeg = clock();
while(!f.eof())
{
std::string line;
std::getline(f, line);
if (!f.eof())
{
lines.push_back(line); num_lines++;
std::stringstream ss(line);
std::string token;
std::vector<std::string> tokens;
while (std::getline(ss, token, ','))
{
tokens.push_back(token);
}
tokenized_lines.push_back(tokens);
}
}
clock_t tEnd = clock();
std::cout << "read " << num_lines << " lines in " << double(tEnd - tBeg)/CLOCKS_PER_SEC << " seconds";
return 0;
}
你怎麼知道他們沒有任何效果?沒有這些定義你有沒有做過測量?無論如何,調試版本總是比發佈版本要慢很多。 – antred
我有調試版本運行速度慢100倍,但歸咎於缺乏小函數內聯。 –
建議:不要嘗試優化調試模式,而是在發佈模式下啓用調試信息。 –