Ver Mensaje Individual
  #1  
Antiguo 05-07-2012
Gercondi Gercondi is offline
Miembro
 
Registrado: jun 2010
Posts: 12
Reputación: 0
Gercondi Va por buen camino
Consulta sobre Web services y Delphi

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;
Responder Con Cita