服务端采用c++ gSoap创建服务,头文件:
int contract__Test(char *arg);
实现代码,空函数
int contract__Test(struct soap *a, tchar *arg) {
return SOAP_OK;
}
客户端采用C#,调用代码:
while (true) //测试GSOAP内存泄漏
{
System.Threading.Thread.Sleep(1000);
string flag = "STASvc";
string mAddr = "http://localhost:9130/";
var arg2 = new STASvc.Test();
STASvc.ServicePortTypeClient mClient = null;
mClient = new STASvc.ServicePortTypeClient(flag, mAddr);
var rlt = mClient.Test(arg2);
}
运行发现每调用一次,服务端C++程序占用内存递增0.1MB,这个问题怎么解决呢?
添加下面代码之后就可以了:
soap_destroy(soap);
soap_end(soap);
soap_done(soap);
soap_free(soap);
您好,您的这个while(True)不说内存泄漏,如果不进行延迟操作,很可能CPU跑满,至于内存泄漏问题,是因为你的代码中并没有释放,一直创建新类。