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属性,可以解决问题。
责任编辑:小草