0

オブジェクトの場所を保存する必要があるプログラムを作成しています。このデータは 100MB を超える可能性があり、ハードディスクに保存したいと考えています。今、私は周りを検索しましたが、これを行うにはいくつかの方法があります: txt-file、sql、xml、...

C++でtxtファイルを作成する方法はすでに知っています。しかし、大量のデータを保存する .txt ファイルの利点は何でしょうか? そして、これを行う最善の方法は何ですか?

現在、番号を行ごとに保存しているので、 で読み取ることができますgetline()。しかし、それは私に問題を与えます、それはそれをうまく読みません。おそらく、.txt が多くのデータを処理できないためか、行ごとの読み取りが非常に遅く、問題が発生するためです。誰かがこれを解決する方法を知っていますか?

ここにいくつかのコードがあります:

    _chdir("c:/Documents and Settings/Bram/Bureaublad/cloth3d");

    ofstream mfile;
    mfile.open("example.txt", ifstream::out);

some calculations...
        mfile << (double) vervangplaats[i][j][0] << "\n";
        mfile << (double) vervangplaats[i][j][1] << "\n";
        mfile << (double) vervangplaats[i][j][2] << "\n";
// the data is stored in the .txt file
mfile.close();

これにより、データがtxtファイルに保存されます。これを抽出して戻します。

std::string b;
ifstream file("example.txt", ifstream::out);
if(file.is_open())
{
        getline(file, b);
    result[0][teller_x][teller_y] = (double) atof(b.c_str());
        getline(file, b);
    result[1][teller_x][teller_y] = (double) atof(b.c_str());
        getline(file, b);
    result[2][teller_x][teller_y] = (double) atof(b.c_str());
}

getline を使用したこの最後の関数は、フレームあたり 2500 回使用されます。

フレームがロードされないのは、おそらくフレームごとの getline の量が多いためですか、それとも単に txt が多くのデータを保存するのに適していないためですか?

4

1 に答える 1

3

ええと、フレームごとにディスクからデータをロードするのは決して良い考えではありません。単に遅すぎるだけです。レンダリングを開始する前に、データを一度メモリにロードする必要があります。

とはいえ、テキスト ファイルは、人間が判読でき、移植可能である必要があるデータに最適です。

このような低レベルのデータは多くの場合、バイナリとして保存されるため、ファイルが小さくなり、読み込みがより簡単かつ高速になります。

于 2013-03-27T10:03:34.730 に答える