使用Delphi上的RemObjects和COM对象进行内存泄漏

时间:2012-12-28 16:54:42

标签: delphi com memory-leaks delphi-xe remobjects

我有一个使用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;

1 个答案:

答案 0 :(得分:1)

在您展示的代码中,我们唯一可以批评的是您的析构函数:

destructor TA.Destroy;
begin
  oServer := nil;
end;

nil分配给oServer是毫无意义的(虽然无害),因为这会自动发生。

但是这里缺少的是对继承的析构函数的调用。所以,你的析构函数应该是这样的:

destructor TA.Destroy;
begin
  oServer := nil;
  inherited;
end;

现在,如果您决定删除oServer的最终版本,那么您只需从类中删除析构函数并依赖基类的析构函数。

但是,您似乎使用无效工具测量内存泄漏。您无法使用任务管理器测量内存泄漏。使用FastMM检漏仪。