J'ai lu les docs gSOAP et vu des mentions du fait que l'on devrait appeler soap_destroy (soap) et soap_end (soap) etc, cependant ce sont toujours des exemples avec un seul appel sur l'objet service. Le service que j'utilise renvoie environ 40 Ko de texte à chaque invocation. Mon problème est que l'utilisation de la mémoire augmente linéairement d'environ la même taille pour chaque demande. J'ai ajouté soap_destroy (service-> savon) dans getWords en vain. Quelqu'un peut-il indiquer quel code de nettoyage manque dans cet extrait de code? Le programme demandeur doit être en cours d'exécution pendant plusieurs jours, donc par nettoyage de la demande est ce qui me préoccupe plutôt qu'à l'arrêt.gSOAP fuite de mémoire du client C++
J'ai posté ci-dessous un exemple analogue (sans vérification d'erreur) basé sur http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=43, (renvoie des blocs de texte à droite?). Toute aide est grandement appréciée!
#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;
}