Fórum Liberar memoria usada em Cliente #275650
05/04/2005
0
o Problema é que a cada execucao da procedure aumenta 70 k ao uso de memoria do programa...
como resolver isso?
Xanatos
Curtir tópico
+ 0Posts
05/04/2005
Edilcimar
Gostei + 0
05/04/2005
Rjun
Gostei + 0
05/04/2005
Xanatos
Enum.Next(1,v,cFetched);
Mais ao isolar codigo...eu descobri que é essa funcao que esta fazendo isso...mas mesmo usando FreeMem, FreeandNil...atribuiando Nil ...em todas as variaveis dessa minha procedure e nao adiantou...
procedure TfrmTerminal.ListaProcessos(Enum: IEnumVARIANT); var i,j,ContLinha:integer; idi:IDispatch; v:OleVariant; cFetched: Cardinal; WbemObject:ISWbemObject; Enum2: IEnumVARIANT; begin i:= 1; ContLinha:= 1; while true do begin Enum.Next(1,v,cFetched); // Essa aqui olha! if(cFetched = 0) then begin break; end; with pbx do Position:= Position+1; idi:= v; idi.QueryInterface(IID_ISWbemObject,WbemObject); Enum2:=WbemObject.Properties_._NewEnum as IEnumVariant; sgProcessos.Cells[1,Contlinha]:= WbemObject.Path_.Path; inc(ContLinha); inc(i); end; end;
Gostei + 0
05/04/2005
Massuda
var X: IEnumVariant; .... ListaProcessos(X); X := nil;
... idi:= v; idi.QueryInterface(IID_ISWbemObject,WbemObject); Enum2:=WbemObject.Properties_._NewEnum as IEnumVariant; sgProcessos.Cells[1,Contlinha]:= WbemObject.Path_.Path; inc(ContLinha); inc(i); Enum2 := nil; WbemObject := nil; idi:= nil; end;
Gostei + 0
05/04/2005
Xanatos
v:= Unassigned;
Mas ainda estou usando ainda dentro do looping...essas outras
idi:= nil;
FreeAndNil(idi);
WbemObject:= Nil;
FreeAndNil(WbemObject);
Aparentemente elas nao adiantam mas a primeira atribuicao resultou na economia de 120k por chamada... pois dentro desse procedimento chamo outro semelhante... mas ainda ta havendo um acrescimo de memoria...de 4 k ...mas ja melhorou muito... Valeu
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)