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