Ver Mensaje Individual
  #18  
Antiguo 08-07-2011
pelikno pelikno is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 95
Reputación: 16
pelikno Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola pelikno.

En el código que adjuntas (#14), para recorrer 100000 registros realiza 100000 ciclos de lectura, que es muchisimo mejor que el primer código que leia caracter a caracter(#8), ya que en ese caso eran 100000 x 22 lecturas. Pero creo que se puede optimizar mucho más el código de lectura en bloque.

No tengo acceso a los datos y puede que tengas que cambiar la cantidad de caracteres por registro o algún detalle que se me escape por no tener el archivo origen o el formato requerido.
Código Delphi [-]... const NCHAR = 22; LEER_X = 20000 ; TOT_BUFFER = LEER_X * NCHAR; procedure TForm1.btnACDSClick(Sender: TObject); var F: file of Char; Buf: array[1..TOT_BUFFER] of Char; c, rl: Integer; T1,T2: TTime; Ciclos: Integer; begin AssignFile(F, 'C:\Archivo.txt'); try Reset(file(F), 1); ClientDataSet.CreateDataSet; ClientDataSet.Open; ClientDataSet.DisableControls; T1:= Time; Ciclos:= 1; repeat BlockRead(file(F), Buf, SizeOf(Buf), rl); c:= 0; while c < TOT_BUFFER do begin if c mod 100 = 0 Then ClientDataSet.MergeChangeLog; ClientDataSet.Append; ClientDataSetCuit.AsString:= Buf[c+1]+Buf[c+2]+Buf[c+3]+ Buf[c+4]+Buf[c+5]+Buf[c+6]+Buf[c+7]+Buf[c+8]+Buf[c+9]+ Buf[c+10]+Buf[c+11]; ClientDataSetD1.AsString:= Buf[c+12]+Buf[c+13]; ClientDataSetD2.AsString:= Buf[c+14]+Buf[c+15]; ClientDataSetD3.AsString:= Buf[c+16]+Buf[c+17]; ClientDataSetD4.AsString:= Buf[c+18]; ClientDataSetD5.AsString:= Buf[c+19]; Inc(c, NCHAR); ClientDataSet.Post; end; Inc(Ciclos); until rl = 0; CloseFile(F); T2:= Time; Caption:= FormatDateTime('hh:mm:ss:dd',T2-T1)+' realizando '+IntToStr(Ciclos)+' ciclos.'; ClientDataSet.EnableControls; except ShowMessage('Archivo inexistente'); end; end;

En este caso, con 100000 registros sólo realiza 7 ciclos en 00:00:05:30 (en mi equipo).

Como no tengo ni conozco el RxMemoryData, usé un TClientDataSet para la prueba. Lo único que tenés que hacer es crear los campos persistentes en él respetando los nombres y el código debería funcionarte.
Cualquier dificultad te adjunto el ejemplo con el generador de datos.

Saludos.
Muchas Graciasecfisa por tomarte el tiempo de hacer el codigo mañana lo pruebo y veo que pasa.
SALUDOS!!!
Responder Con Cita