2017-03-16 7 views
0

私はこれをしばらく解決しようとしています。テキストファイルの読み込みが失敗してフォーマットが遅くなりましたが遅くなりました

テキストファイルを読む。ファイルをロードするための時間を、このコードを使用して

ファイルをロードするための書式はgetl​​ineのに置き換えます。このコードは...しかし、時間を使用すると、あまりにも長いです...

std::string line = ""; 
    std::string file = ""; 
    std::ifstream filepath(path); 

    if (filepath.is_open()) 
    { 
     while (std::getline (filepath,line)) 
     {     
     file = file + line + "\r\n"; 
     } 

     filepath.close(); 
    } 

は約10倍ですフォーマットは失われますが、フォーマットは失われます:

 std::ifstream in(path); 
     std::stringstream stream; 

     stream << in.rdbuf(); 

     std::string file(stream.str()); 

最初のフォーマットを使用して2番目の方法の速度を得ることは可能ですか?それとも速度は上がり、フォーマットも変わらないでしょうか?

ループ内の各ゲットラインで最初の例で同じ文字列をロードしないようにすることを検討しましたが、初期の試みは役に立たなかったようです。

+0

あなたは 'のFileOpen /シーク/ FileRead関数/ FileWrite関数/ FileClose'あなたを使用することができますC++ Builderを使用しているとして、テキストファイル全体を変更せずにメモリに読み込むことができます... fstreamは遅く、制御コードも処理しています(コンテンツが変更された理由です)。テキストファイルにすばやくアクセスしたい場合は、Memo1がVCL TMemoオブジェクトの場合は(フォームに追加する必要がある)、 'Memo1-> Lines-> LoadFromFile(" file.txt ")'を使用することもできます。それは目に見える必要はありません。 – Spektre

答えて

0

もう一度確認した後、これが何と呼ばれているのかわからないが、この文字列の最適化が遅延と書式設定を処理した。

、誰もがそれをさらに高速化する方法を知っている場合は、私がどのように学ぶのが大好きです...

std::string line = ""; 
    std::string file = ""; 
    std::string tmp_str = ""; 
    std::ifstream filepath(path); 
    unsigned int c = 0; 

    if (filepath.is_open()) 
    { 
     while (std::getline (filepath,line)) 
     { 
      tmp_str = tmp_str + line + "\r\n"; 
      c++; 
      if (c > 100) 
      { 
       file = file + tmp_str; 
       tmp_str = ""; 
       c = 0; 
      } 
     } 

     if (c != 0) 
     { 
      file = file + tmp_str; 
     } 

     filepath.close(); 
関連する問題