私は gSOAP ドキュメントを読み、soap_destroy(soap) や soap_end(soap) などを呼び出す必要があるという事実についての言及を見てきましたが、それらは常にサービス オブジェクトに対する単一の呼び出しの例です。私が使用しているサービスは、呼び出しごとに約 40KB のテキストを返します。私の問題は、メモリ使用量がリクエストごとにほぼ同じサイズだけ直線的に増加することです。getWords 内に soap_destroy(service->soap) を追加しましたが、役に立ちませんでした。このコード スニペットに欠けているクリーンアップ コードを誰か指摘できますか? 要求しているプログラムは何日も続けて実行する必要があるため、シャットダウン時よりも要求ごとのクリーンアップが心配です。
http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=43に基づいた同様の例 (エラーチェックなし) を以下に投稿しました(テキストのチャンクが返されますよね?)。どんな助けでも大歓迎です!
#include "soapBibleWebserviceSoapProxy.h"
#include "BibleWebserviceSoap.nsmap"
#include <iostream>
extern "C" {
#include <unistd.h>
}
struct Service
{
BibleWebserviceSoap service;
std::string getWords(std::string &title, int chapter)
{
_ns1__GetBibleWordsByBookTitleAndChapter req;
_ns1__GetBibleWordsByBookTitleAndChapterResponse resp;
req.BookTitle = &title;
req.chapter = 1;
service.__ns2__GetBibleWordsByBookTitleAndChapter(&req, &resp);
return *(resp.GetBibleWordsByBookTitleAndChapterResult);
}
};
int main(int argc, char* argv[])
{
Service s;
std::string genesis("Genesis");
for (int i=0; i<360; ++i)
{
sleep(2);
std::cout << s.getWords(genesis,1) << std::endl;
}
return 0;
}