2016-10-05 21 views
-2

Qtに関する記事やC++でのファイルを書いた記事はすでに見つかりましたが、既存のメソッドと「Qtでファイルを書き込む最速のメソッドは何ですか?」という質問に対する満足のいく回答は見つかりませんでした。Qt - 書き込み速度 - Qtでファイルを書き込む最も速い方法は何ですか?

タスク: ファイルにファイルするために、二重の値(約500.000から1.000.000まで)を一括して書く必要があります。プログラムの構造上、この値はいくつかのQVector(すべてのQVectorが同じサイズ)を含むQListに保存されます。 QVectorsには2つの値が含まれています。さらに、各列(各QList要素は列)は異なる精度で書き込まなければなりません。各列は\ tで区切られています。 ::

  • ファイルを書き込むとIn
  • をFWRITE <

  • <が直接qfileによりとともにqfileによりに書き込みをオペレータにqfileによりに

    • QTextStream:

      は、私はいくつかの方法を試してみました私はQTextStreamとFILEを使ってfwrite(ほぼ同じ速度)を使って最良の結果を得ました.QFile :: QFileは少し遅くて(たぶん30%)でした。

      しかし、私はまだもっと速い方法が必要だと思います。私のPC(Core2Duo)は、2倍の値を500.000倍にすると、かなり長くなります。

      私はBoost Karma C++ Libraryを使用することも考えました - それをお勧めできますか? http://www.boost.org/doc/libs/1_51_0/libs/spirit/doc/html/spirit/karma.html

  • +2

    あなたは絶対にテキストとして書き込む必要がありますか?倍精度文字をテキストに変換することは、かなりのボトルネックになります。 – paddy

    +0

    パフォーマンスを本当に気にするなら、QTコンテナは動かないので、 'QList'と' QVector'を 'std :: vector'で置き換えることから始めるべきでしょう。それが不可能な場合は、キャッシュの動作を改善するために少なくとも 'QList 'を' QVector'に置き換える必要があります。 – Corristo

    +0

    メモ:[QSaveFile](http://doc.qt.io/qt-5/qsavefile.html) – TheDarkKnight

    答えて

    0

    あなたが以下のようにしていると仮定すると、fwriteより速いものは見つけられないでしょう。

    double values[1000] = {...}; 
    
    fwrite(values, sizeof(double), 1000, f); 
    
    +0

    こんにちはSven、ok私はこれを試してみる、ありがとう!直前にofstream << setprecision << double-value;」を試みましたが、QTextStreamよりもまだ遅かったです。 fwriteを使用して精度をフォーマットする可能性はありますか? – johnymow

    +0

    @johnymow私はあなたが最も重要な部分を見逃してしまったと思います: 'fwrite'はそのままバイナリデータを書き出し、テキストとして書きません。あなたの質問は、テキストとしてデータが必要な理由を示していません。 –

    +0

    こんにちは、〜1年の長い遅延のために、私は非常に忙しく、私が今使っている私のプログラムのための実用的な解決策を見つけました。 – johnymow

    関連する問題