Delphi6的TClientDataSet.XMLData存在内存泄漏
来源:优易学  2011-7-3 21:08:47   【优易学:中国教育考试门户网】   资料下载   IT书店
Delphi6的TClientDataSet.XMLData 存在内存泄漏,当你循环调用它获取XML文本,达到一定的循环次数后,你的程序就会报 “Insufficient memory for this operation”错误,查看内存也是节节攀升,说明存在bug。
  如何解决呢?见代码:
  type
  ThcClientDataSet = class(TClientDataSet)
  private
  ...
  function GetXMLData: string;
  procedure SetXMLData(const Value: string);
  protected
  ...
  public
  ...
  property XMLData: string read GetXMLData write SetXMLData;
  published
  ...
  end;
  ...
  function ThcClientDataSet.GetXMLData: string;
  var
  Stream: TStringStream;
  begin
  Stream := TStringStream.Create(’’);
  try
  SaveToStream(Stream, dfXML);
  Result := Stream.DataString;
  finally
  Stream.Free;
  end;
  end;
  procedure ThcClientDataSet.SetXMLData(const Value: string);
  var
  Stream: TStringStream;
  begin
  Stream := TStringStream.Create(Value);
  try
  LoadFromStream(Stream);
  finally
  Stream.Free;
  end;
  end;
  测试证明TClientDataSet.通过Stream导入导出XML是不存在内存泄漏的,用上文继承的ThcClientDataSet 重写XMLDATA属性,可以解决问题。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训