![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Mi aplicacion estas mui lenta
Quando hago una busca en un universo de unos 2.000 archivo(.pas y .dfm), se queda mui lenta mi aplicacion. Abajo mis codigos:
Mi procedure de busca Código:
procedure TForm1.BuscaTexto(path: string; const FileMask, tipo, tabela: string); var SR: TSearchRec; txt: TextFile; Row: string; Found: Boolean; i: Integer; NroExt: TStrings; begin NroExt:= TStringList.Create; try Varrer.Enabled := False; NroExt.Delimiter:= ';'; NroExt.DelimitedText:= FileMask; path := IncludeTrailingPathDelimiter(path); for i:= 0 to NroExt.Count - 1 do begin if FindFirst(path + NroExt[i], faAnyFile - faDirectory, SR) = 0 then repeat Application.ProcessMessages; AssignFile(txt,path + SR.Name); Reset(txt); Found:= False; while not Eof(txt) and not Found do begin Readln(txt, Row); if Pos(tabela, Row) > 0 then begin ListBox1.Items.Add(tipo + ';' + tabela + ';' + SR.Name); Found:= True end end; CloseFile(txt); until FindNext(SR) <> 0 end; finally NroExt.Free; Varrer.Enabled := True; FindClose(SR); end; //end; if FindFirst(Path + '*.*', faDirectory, SR) = 0 then begin try repeat if (SR.Name <> '.') and (SR.Name <> '..') then TextFoundInFile(Path + SR.Name,'*.pas;*.dfm',tipo,tabela); until FindNext(SR) <> 0; finally end; end; end; Código:
procedure TForm1.VarrerClick(Sender: TObject); begin ClientDataSet1.Open; pth := IncludeTrailingPathDelimiter(edtDir.Directory); while not ClientDataSet1.Eof do begin //TextFoundInFile(pth,'*.pas;*.dfm',ClientDataSet1.FieldByName('xtype').AsString,ClientDataSet1.FieldByName('name').AsString); BuscaTexto(pth,'*.pas;*.dfm',ClientDataSet1.FieldByName('xtype').AsString,ClientDataSet1.FieldByName('name').AsString); ClientDataSet1.Next; end; ListBox1.Items.SaveToFile(ExtractFilePath(Application.ExeName) + 'Fontes.csv'); end; |
#2
|
||||
|
||||
Así a simple vista me parece que haces un bucle que repites tantas veces como ficheros hay. ¿Puede ser?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
Hola Paulao.
La acción que realiza el algorítmo, leer cada línea de cada archivo .pas y .dfm hasta encontrar la palabra buscada, como toda búsqueda secuencial, es intrínsecamente lenta y por supuesto su tiempo de ejecución está relacionada en forma directa a la cantidad de archivos a revisar. Creo también, que haber modificado la función por procedimiento e incluir la carga del TListBox dentro de la misma hace que todo sea un poco más lento. Así que retomando la función original, yo probaría si mejora el rendimiento de este modo:
LLamada: Pero como te mencioné arriba, las búsquedas secuenciales son de por sí lentas y si sumamos a eso la lectura secuencial del DataSet... Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 06-03-2012 a las 19:28:35. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
aplicación lenta | Celta | Varios | 2 | 13-01-2012 13:42:19 |
Aplicacion se pone lenta | aanil | OOP | 2 | 06-02-2010 01:42:20 |
Aplicacion lenta | aanil | OOP | 4 | 26-01-2010 15:11:39 |
aplicacion lenta en VPN | fcobanda | Conexión con bases de datos | 1 | 30-04-2005 09:59:33 |
Aplicacion lenta | Eduardo | Varios | 7 | 02-12-2004 09:25:04 |
![]() |
|