Fórum TMemo BeginUpDate ... EndUpDate - Firemonkey Delphi 10.2 #620891
28/12/2023
0
Bom dia, estou tendo um problema utilizando Memo.Lines.BeginUpdate e Memo.Lines.EndUpdate, segue abaixo código, depois explico onde esta o problema.
Loop Combinaões 10:33:44:998
Loop Combinaões 10:33:45:411
Loop Combinaões 10:33:45:616
Loop Combinaões 10:33:45:827
Loop Combinaões 10:33:46:034
Loop Combinaões 10:33:46:244
Loop Combinaões 10:33:46:450
Loop Combinaões 10:33:46:655
Loop Combinaões 10:33:46:859
Loop Combinaões 10:33:47:069
Loop Combinaões 10:33:47:277
Loop Combinaões 10:33:47:487
Loop Combinaões 10:33:47:694
Loop Combinaões 10:33:47:904
Loop Combinaões 10:33:48:108
Loop Combinaões 10:33:48:319
Loop Combinaões 10:33:48:523
Loop Combinaões 10:33:48:739
Loop Combinaões 10:33:48:949
Loop Combinaões 10:33:49:161
Loop Combinaões 10:33:49:381
Loop Combinaões 10:33:49:588
Loop Combinaões 10:33:49:797
Loop Combinaões 10:33:50:005
Loop Combinaões 10:33:50:216
Loop Combinaões 10:33:50:420
Loop Combinaões 10:33:50:629
Loop Combinaões 10:33:50:841
Loop Combinaões 10:33:51:054
Loop Combinaões 10:33:51:266
Se observarem ele insere todas as 490314 no MemoResultado em menos de 10 segundos, mais finaliza o processo em quase 5 minutos pra visualizar na tela.
Me ajudem com uma solução.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | procedure TfrmGeneratorLF_2 . Button9Click(Sender: TObject); var TodasDezenas: TArray< Integer >; ResultadoComb: TArray<TArray< Integer >>; Stopwatch: TStopwatch; j, QtdDezenasCercar, QtdDezenas: Integer ; CombStrList: TStringList; // Usando TStringList para armazenar as combinações TempoMilissegundos: Int64 ; TempoFormatado: string ; CombString: string ; HoraAtual: TDateTime; begin // Código .... MemoResultado . Lines . BeginUpdate; try if Length(ResultadoComb) > 0 then begin for j := 0 to High(ResultadoComb) do begin // Cria a string de combinação com dezenas formatadas CombString := Format( 'Combinação %.*d: %s' , [Length(IntToStr(Length(ResultadoComb))), j + 1 , FormatDezenas(ResultadoComb[j])]); // j MAIS 1, // Adiciona a string à lista CombStrList . Add(CombString); // Adiciona a cada 15000 combinações // Esse Loop esta demorando menos de 10 segundo pra adicionar no MemoResultado as combinações if (j + 1 ) mod 15000 = 0 then // if (j MAIS 1) mod 15000 = 0 then begin // Adiciona as strings de CombStrList ao MemoResultado MemoResultado . Lines . AddStrings(CombStrList); // Adiciona a hora atual ao MemoObsForasDoFiltros // Pra ver a horar que entrou nesse loop adicionando as 15000 Combinações no MemoResultado //Mais abaixo esta a hora do Windows que entrou no Loop HoraAtual := Now; MemoObsForasDoFiltros . Lines . Add( ' ' + FormatDateTime( 'hh:nn:ss:zzz' , HoraAtual)); // (' ' MAIS FormatDateTime('hh:nn:ss:zzz', HoraAtual)) // Limpa CombStrList para o próximo lote CombStrList . Clear; end ; end ; end ; // Adiciona as strings restantes de CombStrList ao MemoResultado MemoResultado . Lines . AddStrings(CombStrList); finally CombStrList . Free; //Esta demorando aqui, quase 5 minutos após ter inserido 490314 Combinações no MemoResultado MemoResultado . Lines . EndUpdate; end ; // Restante do Código...Loop Combinaões 10:33:44:788 end ; |
Loop Combinaões 10:33:44:998
Loop Combinaões 10:33:45:411
Loop Combinaões 10:33:45:616
Loop Combinaões 10:33:45:827
Loop Combinaões 10:33:46:034
Loop Combinaões 10:33:46:244
Loop Combinaões 10:33:46:450
Loop Combinaões 10:33:46:655
Loop Combinaões 10:33:46:859
Loop Combinaões 10:33:47:069
Loop Combinaões 10:33:47:277
Loop Combinaões 10:33:47:487
Loop Combinaões 10:33:47:694
Loop Combinaões 10:33:47:904
Loop Combinaões 10:33:48:108
Loop Combinaões 10:33:48:319
Loop Combinaões 10:33:48:523
Loop Combinaões 10:33:48:739
Loop Combinaões 10:33:48:949
Loop Combinaões 10:33:49:161
Loop Combinaões 10:33:49:381
Loop Combinaões 10:33:49:588
Loop Combinaões 10:33:49:797
Loop Combinaões 10:33:50:005
Loop Combinaões 10:33:50:216
Loop Combinaões 10:33:50:420
Loop Combinaões 10:33:50:629
Loop Combinaões 10:33:50:841
Loop Combinaões 10:33:51:054
Loop Combinaões 10:33:51:266
Se observarem ele insere todas as 490314 no MemoResultado em menos de 10 segundos, mais finaliza o processo em quase 5 minutos pra visualizar na tela.
Me ajudem com uma solução.

Rubens Pena
Curtir tópico
+ 0
Responder
Posts
28/12/2023
Claudio Andrade
Pela carga no FOR que você esta dando, acredito que a utilização de paralelismo seria interessante nessa situação.
Veja esse link abaixo como usar no Delphi e quem sabe resolver seu problema.
https://www.andrecelestino.com/delphi-utilizando-o-mecanismo-de-processamento-paralelo/
Boa sorte!
Veja esse link abaixo como usar no Delphi e quem sabe resolver seu problema.
https://www.andrecelestino.com/delphi-utilizando-o-mecanismo-de-processamento-paralelo/
Boa sorte!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)