RichEdit lento
Olá pessoal, tudo bem?
Estou fazendo um editor de textos em Delphi 2005 e estou utilizando o RichEdit como base do editor.
Ele está funcionando bem, mas quando abro arquivos texto maiores que 1Mb o programa fica muito lento, tanto para carregar o arquivo quanto para fazer buscas, através da função FindText.
Existe alguma configuração ou algum truque que possa deixá-lo mais ágil?
Obrigado pelas dicas! :-)
Jorge Olimpia
Estou fazendo um editor de textos em Delphi 2005 e estou utilizando o RichEdit como base do editor.
Ele está funcionando bem, mas quando abro arquivos texto maiores que 1Mb o programa fica muito lento, tanto para carregar o arquivo quanto para fazer buscas, através da função FindText.
Existe alguma configuração ou algum truque que possa deixá-lo mais ágil?
Obrigado pelas dicas! :-)
Jorge Olimpia
Jorgeolimpia
Curtidas 0
Respostas
Edilcimar
10/05/2005
apesar de nunca ter precisado trabalhar com richedit dom arquivos tão grandes, creio que o problema possa ser o computador (processador x memória), ou então a forma como está trabalhando, mostre o código
GOSTEI 0
Jorgeolimpia
10/05/2005
Caro Edilcimar,
consegui localizar um trecho do programa onde acontece uma das situações de lentidão, que é ao abrir o arquivo texto. Segue abaixo parte do código:
...
MXEDITOR.Lines.LoadFromFile(flst);
for i := 0 to MXEDITOR.Lines.Count do
begin
if LeftStr(PChar(MXEDITOR.Lines.Strings[i]),1) = #12 then
counter := counter + 1;
end;
...
Como o arquivo que vêm para abrir pode ter ou não FormFeed, o jeito que encontrei para saber quantas páginas tem o arquivo texto foi este.
Quando faço o LoadFromFile(flst) em um arquivo texto de 24Mb o tempo de abertura é de aproximadamente 2seg. Quando chega nesta rotina do for i: 0 to ... é que o bicho pega! Demora demais.... A princípio pelo número de linhas que vai vasculhar, que neste arquivo dá umas 250000, mas mesmo assim, se estou trabalhando em memória isso não deveria ser mais rápido?
Quanto a relação processador x memória, no meu caso, acho meio improvável de ser o problema, pois estou executando os testes em um P4 HT 3,06 com 1Gb RAM.
Obrigado pelas dicas! :-)
consegui localizar um trecho do programa onde acontece uma das situações de lentidão, que é ao abrir o arquivo texto. Segue abaixo parte do código:
...
MXEDITOR.Lines.LoadFromFile(flst);
for i := 0 to MXEDITOR.Lines.Count do
begin
if LeftStr(PChar(MXEDITOR.Lines.Strings[i]),1) = #12 then
counter := counter + 1;
end;
...
Como o arquivo que vêm para abrir pode ter ou não FormFeed, o jeito que encontrei para saber quantas páginas tem o arquivo texto foi este.
Quando faço o LoadFromFile(flst) em um arquivo texto de 24Mb o tempo de abertura é de aproximadamente 2seg. Quando chega nesta rotina do for i: 0 to ... é que o bicho pega! Demora demais.... A princípio pelo número de linhas que vai vasculhar, que neste arquivo dá umas 250000, mas mesmo assim, se estou trabalhando em memória isso não deveria ser mais rápido?
Quanto a relação processador x memória, no meu caso, acho meio improvável de ser o problema, pois estou executando os testes em um P4 HT 3,06 com 1Gb RAM.
Obrigado pelas dicas! :-)
GOSTEI 0
Michael
10/05/2005
Olá amigo!
Aproveitando a sua mensagem, dê uma olhada no componente TRichView - http://www.trichview.com. É simplesmente sensacional e deixa no TRichEdit comendo poeira. ;-)
Apesar de ser comercial, tem uma versão free e com fontes.
Abraços!
Aproveitando a sua mensagem, dê uma olhada no componente TRichView - http://www.trichview.com. É simplesmente sensacional e deixa no TRichEdit comendo poeira. ;-)
Apesar de ser comercial, tem uma versão free e com fontes.
Abraços!
GOSTEI 0
Jorgeolimpia
10/05/2005
Realmente este componente tem muitos recursos, contudo não resolve este problema que estou tendo.
Alguem tem alguma dica de como agilizar a leitura deste arquivo?
Obrigado pelas dicas! :-)
Alguem tem alguma dica de como agilizar a leitura deste arquivo?
Obrigado pelas dicas! :-)
GOSTEI 0
Edilcimar
10/05/2005
não seria mais rápido você contar a quantidade de linhas e dividir por um número fixo de linhas por página? por ex. 1200 linhas e fixa em 30 linhas por página
GOSTEI 0
Jorgeolimpia
10/05/2005
Não posso fazer esta divisão, especificamente, pois dependendo das informações contidas no relatório, algumas páginas podem ter mais linhas que as outras e para um relatório com FormFeed isso não é problema, pois ao encontrar este caracter especial a própria impressora entende que deve saltar para a nova página.
Se não encontrar outra solução, o jeito vai ser tentar fazer um thread para calcular o número de páginas, estilo o que o Microsoft Word faz quando se abre um DOC muito grande.
Obrigado pelas dicas! :-)
Se não encontrar outra solução, o jeito vai ser tentar fazer um thread para calcular o número de páginas, estilo o que o Microsoft Word faz quando se abre um DOC muito grande.
Obrigado pelas dicas! :-)
GOSTEI 0
Edilcimar
10/05/2005
normalmente os FF estão no fim da linha, tente por aí para tentar acelerar
GOSTEI 0