Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3878 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Estava fazendo alguns testes de importação de lote nfse com um arquivo contendo cerca de 650 notas. Ao tentar fazer a importação notei que o sistema travava no método LoadFromFile, debugando a unit notei que o problema eram nas funções StringReplace de Delphi que são muito lentas ao menipular uma quantidade maior de caracteres.

Essas 650 notas quando chegou em 5 minutos desisti de esperar ... se pesquisarem por "faster delphi stringreplace" no google irão ver que essa lentidão é bastante discutida

 

Pesquisando um pouco achei alguns substitutos otimizados para o StringReplace, um deles foi o StrReplace, da biblioteca Jedi (unit JclStrings).

 

Fiz as alterações no código para testar e agora demora cerca de 20 segundos a importação.

 

Gostaria de saber a posição dos demais programadores a respeito de uma possível alteração, incorporando a função StrReplace do Jedi dentro do ACBR.

 

 

A dica peguei neste link http://conferences.embarcadero.com/article/32120 no final do artigo (Alternative String Routines (FastStrings and other Libraries))

 

 

Abaixo os trechos de código alterado:

 

Unit AcbrNfseNotasFiscais

 

 try
  {$IFDEF DELPHI2009_UP}
    Encoding := NotaUtil.LoadXML(CaminhoArquivo);
  {$ENDIF}
  ArquivoXML := TStringList.Create;
  ArquivoXML.LoadFromFile(CaminhoArquivo {$IFDEF DELPHI2009_UP},Encoding{$ENDIF});
  Result := True;

  aux := ArquivoXML.Text;
  StrReplace(aux, '&lt;', '<', [rfReplaceAll]);
  StrReplace(aux, '&gt;', '>', [rfReplaceAll]);

//  ArquivoXML.Text := StrReplace(StringReplace( ArquivoXML.Text, '&lt;', '<', [rfReplaceAll]), '&gt;', '>', [rfReplaceAll]);
  ArquivoXML.Text := NotaUtil.RetirarPrefixos(aux);

 

Unit AcbrNfseUtil

 

class function NotaUtil.RetirarPrefixos(const AXML: String): String;
var
 XML: string;
begin
 XML := AXML;
 StrReplace( XML, 'ns1:', '', [rfReplaceAll] );
 StrReplace( XML, 'ns2:', '', [rfReplaceAll] );
 StrReplace( XML, 'ns3:', '', [rfReplaceAll] );
 StrReplace( XML, 'ns4:', '', [rfReplaceAll] );
 StrReplace( XML, 'ns5:', '', [rfReplaceAll] );
 StrReplace( XML, 'tc:', '', [rfReplaceAll] );
 StrReplace( XML, 'ii:', '', [rfReplaceAll] );
 StrReplace( XML, 'p1:', '', [rfReplaceAll] );
 StrReplace( XML, 'nfse:', '', [rfReplaceAll] );
 StrReplace( XML, 'soap:', '', [rfReplaceAll] );
 StrReplace( XML, 'soap12:', '', [rfReplaceAll] );
 StrReplace( XML, 'SOAP-ENV:', '', [rfReplaceAll] );

 result := XML;
end;

  • Este tópico foi criado há 3878 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.