0

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

1 回答 1

1

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

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

分配niloServer相当没有意义(尽管无害),因为这会自动发生。

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

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

现在,如果您决定删除oServerthen 的终结,您可以简单地从您的类中删除析构函数并依赖基类的析构函数。

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

于 2012-12-28T21:08:56.267 回答