7

boost::property_tree::ptree には膨大なメモリ オーバーヘッドがあることがわかりました。私の推定では、空の ptree は約 150 バイトであり、ptree にエントリを入れると、少なくともさらに 150 バイトが追加されます。これにより、何千ものエントリを含むツリーには使用できなくなります。

私の見積もりは外れていますか?オーバーヘッドを低く抑える方法はありますか?

4

1 に答える 1

2

Boost.PropertyTree は、基本的に高速または軽量のパーサーではありません。
高度なレイヤーの利便性と機能を提供することに重点を置いているため、効率的に構築されていないと思います。

同様の質問については、このスレッドをブースト メーリング リストで見ることができます。

Boost.PropertyTree の代替案は次のいずれかになることをお勧めします。

  • SAX パーサー-- これは、XML 構文解析の別のアプローチです。DOM パーサーの反対のようなものです。XML ノードを 1 つずつ解析します。通常、「開始時のファイル全体のメモリ割り当て」は DOM パーサーで発生しますが、SAX パーサーでは発生しません。
  • ロケーターでカスタマイズ可能なパーサー+ ユーザー定義のメモリ プール-- このようなパーサーのアロケーターを設定して、安定したメモリ プールを指すようにすることができます。単純に、事前に割り当てられたメモリの大きなバッファ、断片化対応プール、またはメモリ マップ ファイルなどである可能性があります。
于 2013-06-08T16:14:06.580 に答える