我有一个在Delphi上用DMO创建的webservice和一个发布的函数,他的工作需要使用com对象(特别是使用RemObjects连接到数据库)。我检测到,当我多次调用此函数时,使用when服务的内存急剧增加。
内存泄漏的原因是为com对象保留的内存永远不会被释放。
我要怎么做才能解决这个问题?
谢谢
代码:
constructor TA.Create;
begin
inherited Create;
oServer := CoSQLServer.Create;
end;
destructor TA.Destroy;
begin
oServer := nil;
end;声明
class function CoSQLServer.Create: _SQLServer;
begin
Result := CreateComObject(CLASS_SQLServer) as _SQLServer;
end;发布于 2012-12-29 05:08:56
在您展示的代码中,我们唯一可以批评的是您的析构函数:
destructor TA.Destroy;
begin
oServer := nil;
end;将nil赋值给oServer是没有意义的(尽管是无害的),因为这将自动发生。
但是这里缺少的是对继承的析构函数的调用。所以,你的析构函数应该是这样的:
destructor TA.Destroy;
begin
oServer := nil;
inherited;
end;现在,如果您决定删除oServer的终止,那么您可以简单地从您的类中删除析构函数,并依赖于基类的析构函数。
但是,您似乎使用了一个无效的工具来测量内存泄漏。你不能用任务管理器来测量内存泄漏。使用FastMM检漏仪。
https://stackoverflow.com/questions/14072917
复制相似问题