我有一个由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泄漏检测器。