我有一个使用Remphis SDK通过Delphi XE创建的web服务,并且发布了一个函数来完成他的工作需要使用com对象(使用DMO特别是Ado连接到数据库)。我已经检测到,当我多次调用此函数时,使用Web服务的内存会急剧增加。
内存泄漏的原因是不会释放为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;
答案 0 :(得分:1)
在您展示的代码中,我们唯一可以批评的是您的析构函数:
destructor TA.Destroy;
begin
oServer := nil;
end;
将nil
分配给oServer
是毫无意义的(虽然无害),因为这会自动发生。
但是这里缺少的是对继承的析构函数的调用。所以,你的析构函数应该是这样的:
destructor TA.Destroy;
begin
oServer := nil;
inherited;
end;
现在,如果您决定删除oServer
的最终版本,那么您只需从类中删除析构函数并依赖基类的析构函数。
但是,您似乎使用无效工具测量内存泄漏。您无法使用任务管理器测量内存泄漏。使用FastMM检漏仪。