Árvore de páginas

Carregando...

Índice


       

Introdução


       O objetivo desta página é listar quais foram as modificações realizadas nas releases 3.6 e superiores do Smart View com o objetivo de melhorar a performance da aplicação e mostrar os resultados alcançados. 

Melhorias


Atualizações

     Na versão 3.8 do Smart View foi realizada a atualização do .Net para a versão 8 e a substituição da biblioteca de serialização/desserialização Newtonsoft pela biblioteca padrão System.Text.Json. 

Recebimento de Dados

      À partir da release 3.6, o Smart View passou a suportar o modo chunked no recebimento de dados via API REST nos Conectores Nativos. Em comparação com o modelo paginado de entrega de dados, esse suporte gerou uma melhoria de performance na entrega de dados pelos Provedores Nativos, já que permitiu que, em caso de grandes volumes, fosse realizada apenas um fluxo de leitura ao banco e uma operação de resposta à API. 

     Na release 3.7 foi introduzido um novo formato de resposta na entrega de dados que possibilitou, pelo Smart View, a desserialização em tempo real. Com isso, além de reduzir o consumo de memória pelo fato de não precisar esperar toda a entrega dos dados para iniciar o processo, foi possível implementar uma limitação nas entregas dos dados. Essa limitação é importante para evitar que a entrega de dados gere um consumo de memória no processamento pelo Smart View que seja incompatível com a capacidade computacional disponível. Como anteriormente não havia nenhum limite estabelecido, um Provedor Nativo poderia entregar para o Smart View uma quantidade de dados para ser processada que poderia gerar um erro ou quebrar a aplicação por falta de memória disponível no Sistema Operacional. Outra vantagem é que mesmo quando o limite é atingido, como parte dos dados dentro da capacidade permitida já foram desserializados, o Smart View ainda exibe o recurso com os dados recebidos, informando que não contempla todos os dados e segerindo uma melhoria nos filtros.

    Outra melhoria realizada, ainda na desserealização dos dados, foi a adoção da estratégia de criação de classes dinâmicas para armazenar esses dados. Nessa estratégia são criadas classes com base no esquema de dados do Objeto de Negócio, otimizando o armazenamento em memória.

Fluxo de geração de relatórios

      O fluxo de geração de relatórios foi otimizado, reduzindo as operações de escrita e leitura em banco de dados. No caso de relatórios com grande volumes de dados, essa mudança melhorou significativamente o tempo necessário para a geração dos documentos, já que as operações em banco nesses casos envolviam arquivos de tamanho considerável. 

Resultados


     Para avaliar os resultados alcançados foram realizados testes de performance utilizando como base o relatório intitulado "Listagem de Entradas" do módulo Fiscal do Protheus. Esse é um relatório que normalmente é gerado com grandes volumes de dados. Os testes foram realizados com um volume de 100 mil registros (101 MB de dados), resultando em um relatório com 7.860 páginas. Foram avaliados o tempo de geração do relatório e o consumo máximo de memória:

Versão 3.5

  • Tempo de Geração: 24m10s
  • Consumo Máximo de Memória: 2,827 GB

Versão 3.8

  • Tempo de Geração: 6m01s
  • Consumo Máximo de Memória: 1,248 GB

Ganhos

  • Redução de 75% no tempo de geração (melhoria significativa no tempo de disponibilização do PDF gerado para a interface);
  • Redução de 55% no consumo máximo de memória no processo total de geração;
  • Redução de  89% no consumo máximo de memória na etapa de desserialização dos dados recebidos.

Produto: Framework

Versão: 3.6 ou Superiores

Processo: Framework