Saludos a todos los que hacen parte de este foro.
Tengo una aplicación que contiene un modulo cliente y uno servidor. El modulo de servidor lee cada 5 segundos información de varios web services y la almacena en unos Tclientdataset, para que el modulo cliente pueda utilizar estos datos.
Mi duda es: Es normal que aún cuando estoy liberando (con Free()) todos los objetos que se crean (con Create()) para el llamado a los webservices la memoria virtual del proceso crezca aproximada mente un mega cada 2 horas?
Uno de los procesos que mas hace crecer la memoria virtual es el siguiente:
Código Delphi
[-]procedure LlamadosWS.getOperadores;
var
L_SPRCMXCRAFT: SPRCMXCRAFTQuery;
xORGID, xCRAFT : SPRCMXCRAFT1.Array_Of_MXStringQueryType;
ListaOperadores : SPRCMXCRAFTSet;
I : integer;
op_HTTPRIO : THTTPRIO;
begin
try
L_SPRCMXCRAFT := SPRCMXCRAFTQuery.Create;
SetLength(xORGID,1);
xORGID[0] := SPRCMXCRAFT1.MXStringQueryType.Create;
xORGID[0].&operator := SPRCMXCRAFT1.QueryOperatorType.igual;
xORGID[0].Text := _OrgID;
L_SPRCMXCRAFT.LABORCRAFTRATE := SPRCMXCRAFT1.LABORCRAFTRATE3.Create;
L_SPRCMXCRAFT.LABORCRAFTRATE.ORGID := xORGID;
SetLength(xCRAFT,1);
xCRAFT[0] := SPRCMXCRAFT1.MXStringQueryType.Create;
xCRAFT[0].Text := _ESPECIALIDADES;
L_SPRCMXCRAFT.LABORCRAFTRATE.CRAFT := xCRAFT;
op_HTTPRIO := THTTPRIO.Create(nil);
op_HTTPRIO.HTTPWebNode.UserName := Datamodule1.UsuarioCFZ;
op_HTTPRIO.HTTPWebNode.Password := Datamodule1.PasswordCFZ;
ListaOperadores := GetSPRCMXCRAFTPortType(False,'',op_HTTPRIO).QuerySPRCMXCRAFT(L_SPRCMXCRAFT);
L_SPRCMXCRAFT.Free;
xORGID[0].Free;
xCRAFT[0].Free;
with DataModule2 do
begin
CDS_Operadores_WS.EmptyDataSet;
CDS_Operadores_WS.Close;
CDS_Operadores_WS.Open;
Datamodule2.LimpiarCDS(CDS_Operadores_WS);
for I := 0 to Length(ListaOperadores) - 1 do
begin
try
if ListaOperadores[i].LABOR[0].STATUS.text = 'ACTIVO' then
begin
try
CDS_Operadores_WS.InsertRecord([ListaOperadores[i].LABORCODE.text,
ListaOperadores[i].LABOR[0].PERSON[0].FIRSTNAME.Text + ' ' + ListaOperadores[i].LABOR[0].PERSON[0].LASTNAME.Text,
ListaOperadores[i].CRAFT.text ,
ListaOperadores[i].LABOR[0].PERSON[0].STATUS.Text,
ListaOperadores[i].LABOR[0].PERSONID.Text]);
finally
ListaOperadores[i].Free;
end;
end;
except
Continue;
end;
end;
end;
finally
ListaOperadores := nil;
end;
end;