Delphi:TAdoQuery内存泄漏?

AFF*_*AFF 1 memory delphi memory-leaks ado tquery

我正在使用Delphi 5和ADO开发小型糖尿病计划.我这样做一个小问题:

function GetLowestGlucoseLevel(StartDate:string;EndDate:string): Integer;
var
  Q:TADOQuery;
begin
   try
      Q:=TADOQuery.Create(Application); //Separate unit, owner set to App
      Q.Connection:=dtMod.ADOCon;
      Q.DisableControls;
      Q.Close;
      Q.SQL.Clear;
      Q.SQL.Add('SELECT Min(qGlucose.Glucose) AS MinOfGlucose from qGlucose');
      Q.Parameters[0].Value:=StartDate;
      Q.Parameters[1].Value:=EndDate;
      Q.Open;

      Result:=Q.FieldByName('MinOfGlucose').AsInteger;

      Q.Close;
    finally
      Q:=nil;
      Q.Free; 
    end; 
end;
Run Code Online (Sandbox Code Playgroud)

查询运行正常并按预期返回结果.但是,当我检查Windows任务管理器时,内存使用率在查询后继续上升而不是减少.

如何解决这个问题?

谢谢!

jas*_*nny 13

你是TADOQuery通过先将其设置为nil,然后调用Freenil变量(什么都不做)来泄漏

  • Windows任务管理器不显示实际的内存使用情况,http://delphi.about.com/od/delphitips2007/qt/memory_usage.htm.问题中的代码只有我描述的泄漏.您应该使用FastMM并按照Bharat的回答中的描述设置`ReportMemoryLeaksOnShutdown`以查找任何其他泄漏. (4认同)
  • @AFF杰森是对的.在调用"Free"之前将`Q`设置为`nil`将不会释放`TADOQuery`对象.当你删除它并仍然目睹内存泄漏时,这意味着你有多个泄漏,只有一个固定的泄漏.(或者你没有重新编译). (3认同)