Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde.

Estou com um problema na geração do xml da NF-e com muitos itens, fiz uma simulação utilizando o ACBrNFe_demo, segue tomada de tempos.

100 itens = 2 segundos
200 itens = 4 segundos
300 itens = 7 segundos
400 itens = 14 segundos

Para simular, onde o ACBrNFe_demo popula os itens, fiz um for de 1 até o número de itens desejados.

Com algumas modificações no arquivo pcnGerador para utilizar a classe TStringBuilder, nenhum dos testes acima chegou a 1 segundo. Ressalto que mantive a compatibilidade com o delphi 7, porém não consigo testar com o Lazzarus.

Entendo perfeitamente a complexidade de alterar esta unit, porém a diferença de tempo é absurda. Fiz vários testes e todos geram o xml corretamente.

Gostaria de saber o que vocês acham sobre essa possível modificação? 

pcnGerador.pas

  • Curtir 3
Postado (editado)

Fiz o teste com 400 itens, ficou 311 Kb, porém isso pode variar de acordo com as informações contidas nos itens do xml, notas referenciadas entre outras coisas.

E o MOC prevê até 990 itens.

Editado por Luiz Fernando
  • Consultores
Postado
1 hora atrás, Luiz Fernando disse:

Com algumas modificações no arquivo pcnGerador para utilizar a classe TStringBuilder, nenhum dos testes acima chegou a 1 segundo.

Particularmente eu prefiro não utilizar a classe TStringBuilder.

Na verdade este uso pode é tornar o tudo mais lento. Em especial se é utilizado Multi-Threading.

Vou tentar analisar o arquivo com calma e verificar o motivo da lentidão.

É possível me passar exatamente as alterações do Demo do NFe que fez pra reproduzir a situação e o passo a passo?

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado
45 minutos atrás, Luiz Fernando disse:

E o MOC prevê até 990 itens.

Sim. (a rigor, 999 itens). Mas também prevê o limite de 500 KB. Quem atingir primeiro...

47 minutos atrás, Luiz Fernando disse:

Fiz o teste com 400 itens, ficou 311 Kb

Que legal. Obrigado. Valeu.

Postado (editado)
28 minutos atrás, EMBarbosa disse:

Particularmente eu prefiro não utilizar a classe TStringBuilder.

Na verdade este uso pode é tornar o tudo mais lento. Em especial se é utilizado Multi-Threading.

Vou tentar analisar o arquivo com calma e verificar o motivo da lentidão.

É possível me passar exatamente as alterações do Demo do NFe que fez pra reproduzir a situação e o passo a passo?

Se resolvermos de outra forma, por mim sem problemas.

A alteração foi feita no procedimento GerarNFe.

    // Adicionando Produtos
    for I := 0 to 400 do begin
        Produto := NotaF.NFe.Det.Add;

       //Adiciona demais dados dos itens conforme já havia no ACBrNFe_Demo.

   end;

E no final desse procedimento só verifiquei o tempo de geração do XML.

    hHora := now;
    NotaF.GerarXML;
    ShowMessage(FormatDateTime('HH:NN:SS:zzz', Now - hhora));
    
    ACBrNFe1.NotasFiscais.GerarNFe;
 

Editado por Luiz Fernando
  • Consultores
Postado

Eu consegui reproduzir aqui. Com 800 itens o processo todo do método TForm1.GerarNFe chega a 30 segundos.

Me parece que está relacionado ao que já passamos com outros métodos como o ACBrUtil.TiraPontos.

Pelo que entendi, na verdade, não é necessária a implementação separada para o TStringBuilder. Eu removi ela e mesmo assim a execução ficou em menos de 1 segundo.

Não vou conseguir terminar hoje porque tenho um compromisso e preciso sair daqui a pouco.

Só uma observação:

Seu arquivo tem muitas alterações de layout... Quando for assim, é preferível que envie separadamente as alterações de layout e alterações no código.

Isso facilita para analisar o código específico.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
Postado

Enviei uma alteração na revisão 13000. Acredito que resolva o caso apresentado.

Uma NFe de 800 itens agora é gerada em menos de um segundo.

Não foi necessário utilizar o TStringBuilder, alterar a propriedade para utilizar a função set|get e nem IFDEFs.

Por favor queira testar.

Ahhh... e quase ia esquecendo. Muito obrigado pelo report.

  • Curtir 6

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado
20 horas atrás, EMBarbosa disse:

Enviei uma alteração na revisão 13000. Acredito que resolva o caso apresentado.

Uma NFe de 800 itens agora é gerada em menos de um segundo.

Não foi necessário utilizar o TStringBuilder, alterar a propriedade para utilizar a função set|get e nem IFDEFs.

Por favor queira testar.

Ahhh... e quase ia esquecendo. Muito obrigado pelo report.

Já estava com o martelo,  e com tempo( estudo , curiosidade )  colocou o prego , no lugar certo, numa unica martelada.

Obrigado pelas dicas dos referidos artigos.

 

  • Curtir 1
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Consultores
Postado

O @Luiz Fernando é que ajudou muito por ter reportado o problema, como reproduzir e até uma sugestão de correção.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 2818 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.