2016年8月5日 星期五

改變stack大小

用ifstream讀取一個14MB的文字檔竟然要花7s..
在c#一樣的檔案只花300ms
只好踏上尋找更快開檔方法之路(是誰說C++程式效率很好的...)
 ifstream myfile("text.asc");

 stringstream ss;

 while (getline(myfile, line))
 {
  ss << line;
 }
為了加快檔案讀取的速度,找了個方法說要加大stream的buffer的buffer size
加入了以下code

   const int MySize = 1024 * 1024;
   char MrBuf[MySize];
   ifstream myfile("text.asc");
   myfile.rdbuf()->pubsetbuf(MrBuf, MySize);
但卻出現stack overflow的 error
先加大stack試試
參考MSDN,在project>properties>C/C++>Command line加入/F sizeInBytes
然後在Linker>System>Stack Reserve Size加入需要的buffer size
這方法的確讓stack overflow error 消失
but...
讀檔速度一樣慢啊...

沒有留言:

張貼留言