TMemo BeginUpDate ... EndUpDate - Firemonkey Delphi 10.2
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.
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
Curtidas 0
Respostas
Claudio Andrade
28/12/2023
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!
GOSTEI 0