4

C++ で json_spirit ライブラリを使用して、200 MB の json ファイルを解析しています。驚いたことに、プログラムでメモリに読み込むと、RAM の 1.5 GB が使用されます。これはjsonを逆シリアル化するときに期待されるものですか?

jsonファイルにロードする方法は次のとおりです。

 std::ifstream istream(path.c_str());
 json_spirit::mValue val;
 json_spirit::read(istream, val);
4

2 に答える 2

1

あなたはrapidjsonを試すことができます。

メモリ使用量とパフォーマンスの両方に最適化されています。

insitu-parsingオプションを使用する(つまり、解析のソース文字列を変更する)ことにより、DOMを32ビットアーキテクチャに格納するためにJSON値ごとに16バイトしか発生しません。文字列値は、変更されたソース文字列を指すポインタを使用します。

メモリ使用量ははるかに少なくなると思います。

一方、rapidjsonはSAXスタイルの解析もサポートしています。アプリケーションがJSONファイルを最初から最後までトラバースする必要がある場合(たとえば、統計を行う場合)、SAXスタイルのAPIはさらに高速になり、メモリ消費量が非常に少なくなります(プログラムスタック+文字列値の最大長)。

于 2012-11-14T08:31:36.537 に答える
0

これは JSON 依存ではないと思います。それは、データ構造のオーバーヘッドの問題です。小さなオブジェクトが多数ある場合、管理部分はますます関連性が高くなります。

ただし、7 倍以上のオーバーヘッドは、実際には過剰に思えます。

于 2012-10-27T23:17:51.320 に答える