POCO JSONを使用して、saxパーサーとして使用する単純な階層型jsonパーサーを作成しました。文字列またはストリームを parse メソッドへの入力として使用した場合、結果に違いはありますか。以下の呼び出しを参照してください。または、異なるコンストラクターは同等ですか?
Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);
メモリ消費、速度などの面で?
POCO JSONを使用して、saxパーサーとして使用する単純な階層型jsonパーサーを作成しました。文字列またはストリームを parse メソッドへの入力として使用した場合、結果に違いはありますか。以下の呼び出しを参照してください。または、異なるコンストラクターは同等ですか?
Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);
メモリ消費、速度などの面で?
std::string バージョンは、ユーザーに代わってストリームを作成する単なるラッパーであるため、最終的に合計はほぼ同じになり、string はユーザーにとってより便利です。
[編集]
これは 1.5.2 で変更されました - ラッピングが削除されたため、(ストリームと文字列) の両方のバージョンが繰り返されるようになりました。ベンチマークの例を使用して、ストリームが文字列よりもどれだけ遅いかを判断できます。
[/編集]
1.5.2にはいくつかの重大な変更があることに注意してください- DefaultHandler の名前が削除され、内部でハンドラーが自動作成されたスマート ポインターに変更されました (これが、DefaultHandler を廃止しなければならなかった主な理由であり、既存のコードはスタックで作成されたハンドラーを渡さなくなりました)。スマート ポインターの場合、最初から適切な設計ではありませんでした)。したがって、1.5.2 では、デフォルトの解析のために明示的なハンドラーを作成する必要がなくなります。
std::string json = "{ \"test\" : null }";
Parser parser;
Var result = parser.parse(json);
パフォーマンスに関心がある場合は、現在の Poco::JSON パーサーの速度が遅く、Poco::Web::JSONの非常に高速なパーサーまたはより高速なパーサーを使用することに注意してください ( /書いてください)。要するに、1.5.x はまだ WIP です。
お役に立てれば。
編集:
Windows および Mac でのベンチマーク(~15MB の JSON ファイル):
ウィンドウズ
Poco::JSON: 1 195 313 [us]
Poco::Web::JSON: 403 320 [us]
json-parser: 321 289 [us]
libjson: 610 352 [us]
MAC (クラン)
Poco::JSON: 480 965 [us]
Poco::Web::JSON: 176 297 [us]
json-parser: 220 172 [us]