2

POCO JSONを使用して、saxパーサーとして使用する単純な階層型jsonパーサーを作成しました。文字列またはストリームを parse メソッドへの入力として使用した場合、結果に違いはありますか。以下の呼び出しを参照してください。または、異なるコンストラクターは同等ですか?

Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);

メモリ消費、速度などの面で?

4

1 に答える 1

5

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]

于 2013-04-06T22:34:52.457 に答える