2012-06-05 50 views
-2

我需要在C++中編寫文件解析器。C++文件解析器比c慢#

這裏是我的代碼:

std::string line;  
vector<string> slice; 

while(getline(m_inputStream, line)) 
{   
} 

我的文件特別大,所以這個循環需要12秒。

我的C#代碼:

StreamReader sr = new StreamReader(fileName); 
string strline = ""; 

while (!sr.EndOfStream) 
{ 
    strline = sr.ReadLine(); 
} 

而且它需要0.6秒......我在做什麼錯在我的C++?

+2

你如何衡量?你有什麼測量?發佈還是調試?哪個編譯器,哪個標準庫? – Simon

+0

@izomorphius:你的評論是誰? – Simon

+0

使用visual studio作爲編譯器。而且我在這兩個人身上放了一個計時器,所以我正在測量時間。 – user1012750

回答

2

首先,你在做什麼slice

機會是C#版本正在讀入字符串,然後放棄它 - 和c#JIT正在優化到一個無操作,所以0.6秒只需要初始化和退出。 C++版本將生成代碼來讀取字符串,以便它真正處理輸入文件。如果要比較性能,請確保C++版本使用發佈設置構建,調試代碼對perf的意義不大。

不要與字符串的東西,你會看到不同的性能數據,並檢查您的內存使用兩個系統中,C#一個會佔用更多的內存,直到GC踢。