内存泄漏使用delphi上的remobject和com对象



我有一个由delphi xe上的remobjects sdk创建的Web服务,并且发布了一个函数,该功能要执行他的作品需要使用COM对象(特别是使用DMO的ADO连接到数据库)。我已经检测到,当我将此功能调用很多次时,使用网络服务的内存会大大增加。

内存泄漏的原因是,保留给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;

在您显示的代码中,我们唯一可以批评的是您的destructor:

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

nil分配给oServer是毫无意义的(尽管无害),因为这将自动发生。

但是,这里缺少的是对继承的驱动器的呼唤。因此,您的破坏者应该看起来像这样:

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

现在,如果您决定删除oServer的最终确定,则可以简单地从类中删除毁灭者并依靠基类的删除。

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

相关内容

  • 没有找到相关文章

最新更新