basicamente tudo isso que a gente viu até agora dos tipos das alocações a gente consegue aprender isso normalmente a gente aprende com experiência mesmo do dia a dia fazendo comparações fazendo os testes que a gente fez aqui né existem diversos tipos de teste para fazer essas coletas né do que que tá executando etc etc mas eu diria que a maioria disso você vai aprendendo ali no dia a dia até com pessoas mais experientes no time que trabalham com você vão te dando essas dicas tá é super importante então a parte básica ali já acabou as
dicas básicas tá E ali a gente conseguiu ver diversas situações onde a gente teve um ganho de memória muitas vezes extremamente relevante em cenários onde a gente poderia estar fazendo uma tipagem diferente um código diferente né mas também existem cenários que é um pouco mais complexo obviamente ali a gente fez quatro cinco linhas de código um cenário de demo né uma demonstração para vocês mas também existe dentro do próprio visual Studio eu tô usando aqui hoje a versão 2022 professional existe também e ferramentas de Diagnóstico que podem te ajudar em alguns cenários eu vou mostrar
para vocês aqui aquela mesma implementação que a gente fez então basicamente aquela mesma implementação que a gente acabou de fazer lá no programa CS que era a parte de preparação da lista e mensurar o a ali do for e do for it né então e se a gente for aqui no forno for it você vai perceber que a gente tem o código rodando tudo mais né E vamos tentar entender se a gente consegue entender aqui por exemplo Qual é o uso de memória disso quanto de CPU etc para isso a gente consegue usar uma ferramenta
tá aí aqui eu não vou entrar no mérito de licenciamento e tudo mais eu desconheço isso para falar a verdade mas acredito que eh o visual Studio aí nas versões pelo menos professional que é que eu tô usando tem essa guia aqui de debug tá então essa guia de debug aqui a gente vai encontrar aqui um performance profiler esse performance profiler ele é uma ferramenta de Diagnóstico embutida na própria ferramenta do visual Studio que ele vai durante um tempo aqui observar o nosso código e trazer algumas estatísticas em tempo aqui de execução Então a gente
vai clicar nele você vai ver que ele tem diversas opções aqui sendo elas por exemplo uso de memória contadores do dnet a locação CPU dentre outros que a gente pode usar instrumentação iio e tudo mais então aqui você vai escolher os Tools né as ferramentas necessárias pro teste que você vai fazer no meu caso aqui eu não tenho acesso a dados não faz sentido eu colocar aqui para eu pegar acesso a Database e tudo mais Então nesse caso aqui vamos colocar uso de memória contadores dnet e CPU usage tá aqui se eu vier aqui no
Change Target posso escolher qual que é o target que eu quero no meu caso aqui como eu tô rodando local eu vou selecionar o Startup Project que é o meu projeto de linha de comando aqui e tem outras formas de fazer você pode até achar um processo um executável uma aplicação que tá rodando lá no Windows Store instaladas um wsl e assim sucessivamente tá então vou mostrar para vocês aqui o que que dá para fazer é bem simples mesmo então a gente escolhe o que a gente quer de ferramental aqui de profiling dá o start
ele vai rodar E aí ele rodando ele vai gerar aqui algumas estatísticas né vai rodar como se tivesse fazendo um debug mesmo e vai me dar algumas estatísticas então ele vai começar a trazer esse report aqui logo de cara você vai ver aqui eh a parte de memória o processo de memória o percentual de CPU e tudo mais e a gente consegue começar a brincar aqui né então se eu cliquei aqui por exemplo no CPU uset o que que ele tá me dando de informação aqui que é relevante pra gente começar a fazer uma leitura
mais especializada no o que pode est causando uma possível lentidão ou qual método ou qual parte do código tá levando mais tempo se você observar aqui no top functions ele tá me falando que aquele código preparar lista que a gente fez ele tá ocupando aqui 64.20 do tempo de execução da CPU Ou seja é muita coisa praticamente quase 70% do tempo ali do uso de CPU na verdade tá sendo alocado para meramente fazer um preparar lista aqui e Aqui vai um pouco Claro de experiência também do dia a dia mas você pode navegar você pode
entender aqui o que que tá acontecendo Qual é o método que tá sendo chamado eh como que a stack tá se comportando ele vai mostrar para você também aqui por exemplo eh O que que está acontecendo linha a linha né Aqui tem algumas coisas mais eh privadas né mais internas da stack de forma resumidamente falando mas você pode ver que ele tá fazendo bastante alocação bastante uso de CPU aqui naquele método o que a gente poderia fazer aqui num caso desse é pegar né Então veja aqui 60 e pouco né pegar e falar poxa que
que eu posso melhorar nesse método então já que eu sei que ele é um método que para esse cenário tá me dando a dor de cabeça aqui aist voltando lá nos primórdios quando a gente conversou ali sobre a locação de memória se eu for noist com certeza ele deve tá trabalhando bastante porque tem esse colega ob aqui que tá fazendo os nossos Box unboxings aqui e vai tomar mais tempo uma alternativa seria a gente por exemplo ao invés de utilizar essa a relish a gente vai eh colocar aqui uma lista de inteiros né nós já
fizemos isso anteriormente mas só para vocês verem como as coisas mudam esse preparar lista aqui já tava eu criei um preparar lista dois com a implementação para ele ler basicamente e aquela estrutura nova né para ele adicionar aqui o list.add ao invés do Array list que a gente criou ali em cima e aqui no mensurar a ao invés de fazer essa conversão aquele Box unboxing eu vou fazer o assignment direto daquela variável então a diferença é essa né A gente observou que Possivelmente isso aqui tá caro né pro processamento de CPU essa estrutura de dados
talvez não seja relevante para esse cenário que a gente apresentou E aí vamos voltar lá no no program e vamos chamar Inés de chamar o preparar lista que foi o primeiro cenário que a gente observou vamos chamar o preparar lista do e vamos rodar de novo aquele debug e vamos chamar novamente aqui o performance profiler né basicamente não vou mudar nada que é o mesmo teste vou dar o start de novo que que vai acontecer como eu já tenho essa experiência eu já sei que aquel que aquele tipo de alocação não tá Digamos que da
melhor forma possível né né então agora se a gente olhar aqui no CP usage o que ele vai nos dar de dado ó praticamente e a gente conseguiu reduzir ali ó para 37% a gente teve uma melhoria de performance aqui só mudando a tipagem para praticamente menos da metade né ou quase a metade aqui Então veja que dessa forma aqui é uma forma também de você ir medindo visualmente quando você pega um código legado um código de alguma outra empresa terceirizada ali e você consegue detectar eh métodos e trechos do seu código que estão executando
de uma forma e você não tá entendendo onde pode estar esses problemas né então aqui ele vai até pro código como eu mostrei para vocês e tudo mais ele tá falando até aqui que inclusive ó esse Random pnex aqui e Apesar dele não estar dentro do do for né talvez não seja uma boa forma de trabalhar aqui a gente fez como um teste como exemplo né mas talvez esse código também tá causando e um over meio que desnecessário aqui vamos falar dessa forma tá Então veja é uma forma também com a própria ferramenta com o
próprio visual Studio de você ir fazendo um trabalho ali de pincelar e o que que tá acontecendo no nos seus processos nas suas aplicações nos seus métodos não existe uma forma mágica que você vai literalmente pegar um código ali e vai entender que tá acontecendo você tem que tirar métricas você tem que entender você tem que usar ferramental e tudo mais né esse aqui essa ferramenta ela ajuda bastante tá porque como eu mostrei para vocês aqui a gente consegue visualmente coletar algumas informações de memória CPU se tivesse uma chamada a dados ajudaria bastante a gente
então é uma ferramenta que eu recomendo para vocês darem uma olhada depende da versão do seu vis estudo aí Claro mas uma ferramenta muito potente que te dá vários insights E aí com a sua experiência aí no dia a dia você vai alterando o código fazendo novos testes e tendo melhora de performance significativa m