我用Tquery控件执行sql语句,从数据库里查出一个数据集,请问这个数据集所占的内存什么时候释放,系统能自动释放吗(比如在关闭该控件所在的窗体的时候)?我是不是在不需要这个数据集的时候,手工释放内存,怎样释放?
谢谢!

解决方案 »

  1.   

    ??怎么开俩贴??
    其实 TQuery 它的内存分配等已经都封装在里面了 由它自己进行控制的 你在外面根本不能直接控制 只有 Close可能会导致其释放它占用的内存
      

  2.   

    procedure TDataSet.Close;
    begin
      Active := False;
    end;procedure TDataSet.SetActive(Value: Boolean);
    begin
      if (csReading in ComponentState) then
      begin
        FStreamedActive := Value;
      end
      else
        if Active <> Value then
        begin
          if Value then
          begin
            DoBeforeOpen;
            try
              OpenCursor;
            finally
              if State <> dsOpening then
                OpenCursorComplete;
            end;
          end else
          begin
            if not (csDestroying in ComponentState) then DoBeforeClose;
            SetState(dsInactive);
            CloseCursor;
            if not (csDestroying in ComponentState) then DoAfterClose;
          end;
        end;
    end;procedure TDataSet.CloseCursor;
    begin
      BlockReadSize := 0;
      FInternalOpenComplete := False;
      FreeFieldBuffers;
      ClearBuffers;
      SetBufListSize(0);
      InternalClose;
      FBufferCount := 0;
      FDefaultFields := False;
    end;
    结论:
    Query.Close;资源就被释放了~~
    所以一般建议这样使用:
    Query.Open;
    { TODO : 使用查询结果 }
    Query.Close;而不建议使用://这样造成资源浪费~~
    Query.Close;
    { TODO : 使用查询结果 }
    Query.Open;