7

libxml2 を使用して XML パーサーをコーディングしています。実際、私はそれを終えましたが、メモリのかなり厄介な問題があります。プログラムはまずデータベースからいくつかのリンクを取得し、それらのリンクはすべて XML ファイルを指しています。curl を使用してダウンロードします。プロセスは簡単です。ファイルをダウンロードしてから解析します...

問題は、解析が終了したときのようです。Curl は次のファイルをダウンロードしますが、以前の XML は解放されていないようです。これは、libxml2 が RAM にロードしていると思われるためです。最後の XML を解析すると、約 2.6GB のリークが発生し (これらのファイルの一部は非常に大きいです...)、私のマシンには 4GB の RAM しかありません。現時点では機能しますが、将来、データベースにさらに多くのリンクが追加されるため、今すぐ修正する必要があります。

私のコードは非常に基本的です:

xmlDocPtr doc;
doc = xmlParseFile("data.xml");

/* code to parse the file... */

xmlFreeDoc(doc);

私は使用してみました:

xmlCleanupParser();

しかし、ドキュメントには、「ドキュメント関連のメモリの割り当ては解除されません」と書かれています。( http://xmlsoft.org/html/libxml-parser.html#xmlCleanupParser )

だから、私の質問は次のとおりです。誰かがこのドキュメントに関連するすべてのメモリの割り当てを解除する方法を知っていますか?

4

2 に答える 2

1

ゲームの後半ですが、今日この投稿を見つけました。他の読者にとっても役に立つかもしれません。

大きなドキュメントを解析または生成する場合は、XmlReader および XmlReader API を検討してください。これにより、メモリ使用量が大幅に削減され、入力がどれほど大きくても、実際にはほぼ一定の使用量になります。

http://xmlsoft.org/html/libxml-xmlreader.html http://xmlsoft.org/html/libxml-xmlwriter.html

于 2014-05-01T07:39:41.110 に答える