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