关于内存泄漏(100分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间

Unregistered / Unconfirmed
GUEST, unregistred user!
测试中发现,每执行一次下面的过程内存占用就会多出100k左右,但从代码上我没看出哪里是元凶,请各路大侠帮忙看一下,哪里有可能导致内存泄漏?代码如下:
procedure TMainFrm.LoadDoc;
var
Stream, destream: TMemoryStream;
begin
if qry1.RecNo>0 then
begin
redt.clear;
Stream:=TMemoryStream.Create;
destream:=TMemoryStream.Create;
try
if not (qry1.FieldByName('OLE').IsNull) then
begin
if not ConPasswd then Exit;
TBlobField(qry1.FieldByName('OLE')).SaveToStream(Stream);
Stream.Position:=0;
UnCompress(stream,destream);
pgsbr1.Percent:=40;
redt.LoadFromStream(destream);
pgsbr1.Percent:=90;
end
finally
Stream.Free;
destream.Free;
end;
end;
end;

procedure UnCompress(const CompressedStream: TMemoryStream;var destream:TMemoryStream);
var
SourceStream: TDecompressionStream;
Buffer: PChar;
Count: Integer;
Begin
//从被压缩的流中读出原始流的尺寸
CompressedStream.ReadBuffer(Count, SizeOf(Count));
//根据原始流的尺寸大小为将要读入的原始流分配内存块
GetMem(Buffer, Count);
Try
SourceStream := TDecompressionStream.Create(CompressedStream);
//将被压缩的流解压缩,然后存入Buffer内存块中
SourceStream.ReadBuffer(Buffer^, Count);
destream.WriteBuffer(Buffer^, Count);
destream.Position := 0;//复位流指针
finally
FreeMem(Buffer);
end;
end;
 
自己解决了,要分的来跟贴。
 
既然解决了,就说说吧,
 
什么地方泄漏了,是不是其他地方的代码?最近也做这方面的东西,需要压缩数据流
 
既然解决了,就说说在哪解决的啊。
 
SourceStream应该是这个没有释放吧。
 
分分分!!!
 
SourceStream没有释放。不知我分析的是否正确?
 
if not ConPasswd then Exit;
如果退出了,就有streamMemory没有释放
 
100分,还差1人,再顶一人平均分了
两次存在泄漏,楼上的都已经发现了,只怪我不细心,才白白浪费100分
呵呵
 
多人接受答案了。
 
后退
顶部