continuando aqui com as otimizações básicas em dnet a gente precisa falar um pouquinho também de collections né em projetos produtivos é super importante você entender que tipo de coleções Ali você vai colocar os elementos e tem projetos que a gente precisa incluir e dados ali em tempo de runtime né uma lista que você não tem certeza de quantas informações imagina o cenário você tá consumindo uma web API externa você não sabe se vai vir 500. 000 informações 1 milhão 10. 000 então esses cenários eles influenciam muito na performance né e para mim é uma otimização básica que a gente consegue fazer em dnet simplesmente escolhendo o tipo que você vai utilizar ali né o tipo de elemento o tipo de coleções que você vai utilizar falamos já sobre as collections né existem collections genéricas que elas são mais prop para esses cenários Então quando você não tem muita certeza ali do tamanho das listas ou do retorno de algum tipo de informação que você vai ter e você precisa colocar isso dentro de uma lista o ideal é você usar uma coleção genérica Mas vamos mostrar isso em código basicamente tá Já vamos direto e depois eu trago uma explicação aqui um pouco mais acerca do que aconteceu então a gente vai continuar com esses testes veja que dentro desse projeto aqui a gente tá crescendo tá a quantidade de códigos aqui que a gente a gente pode ter uma certa um certo ganho de performance com coisa simples então aqui dentro de collections vamos fazer a mesma coisa eu queria um Collection SOS aqui esse aqui essa essa variável aqui ela vai ser o número de interação que a gente vai ter tá então a gente vai continuar fazendo aqueles mesmos testes dos métodos que a gente tem feito isso aqui parece besteira parece simples mas faz total diferença quando você tá programando e você precisa pensar em performance Tá então vamos colocar os mesmos nomes aqui medir método a vai ser um método aqui aí aqui dentro a gente coloca uma tipagem medir B na verdade vamos fazer com a e b primeiro aqui ó Então vamos medir dois métodos o método a e o método b o método a por sua vez a gente vai colocar aqui e uma arr list Tá então vamos colocar um arr list chamar de list e vamos instanciar aqui com New ar list vamos usar nosso amigo que stop watch que a gente tem utilizado ele e de novo vamos fazer aquele for Zinho pra gente pegar a quantidade de interações que nós teremos aqui e aqui a gente vai fazer um list pad de I que é a interação que tá sendo feita dentro desse for aqui V fazer um stop watch aqui que é um Stop Ah aqui tá faltando um start né start start New se eu não me engano hum stop watch start New isso isso mesmo e aqui a gente dá um stop e aqui a gente faz um return de novo para pegar o eleps mils né quanto tempo rodou o escopo desse desse cara aqui aí vamos copiar esse código fazer a mesma coisa ali embaixo para ser um pouquinho mais rápido tá vamos pegar aqui ao invés de um ar list né então aqui já entra o conceito da estrutura de dados Então vamos pegar esse a relish vamos trocar por uma lista dia inteiro tá E aqui é a mesma coisa vamos passar uma lista dia inteiro Lembrando que aqui mesmo papo das alocações né Qual o espaço de memória que você vai fazer a locação aqui vamos rodar isso aqui primeiro vamos ver o resultado disso tá desses dois métodos primeiro método com a relist tô incluindo o mesmo número de interações aqui tá se eu não me engano tá 1 milhão aqui e a mesma coisa lá aí vamos lá no programa.
cs e Vamos fazer as mesmas variáveis lá V pegar um long aqui duração a igual Collection S que é o nome da nossa classe ponto medir método a aqui eu vou fazer duração de B medindo o método b e console right Line de novo pra gente fazer a locação de aist a performance tá dando alguma coisa aqui que vai aparecer em milisegundos né E a gente vai pegar isso aqui e vai colocar duração de ali vamos copiar e colar fazer a mesma coisa pro B aqui vai ser uma lista de inteiro vamos pegar a duração do B vamos rodar isso aqui de novo Lembrando que isso aqui Depende de onde está rodando né da minha máquina do meu hardware tem n características aqui mas já é um começo tá a gente começa a pensar um pouquinho em em como medir essa performance aqui o vamos rodar vamos ver o que que vai acontecer aqui eu vou dar um start aqui deixa eu dar um build primeiro build Solution beleza vamos rodar e vamos ver a diferença aqui e aí a gente vai entender o porquê olha lá com a relist eu tenho aqui uma alocação aí desse desse tanto de interação rodou em 218 msos diferente de uma lista de inteiro aqui que rodou em 10 msos Olha a diferença gritante de performance que a gente tem aqui escolhendo UMP né E vamos pro caderno aqui né Vamos literalmente falando né O que que aconteceu no primeiro cenário aqui ó né eu tenho Opa aqui tá list mas é aist tenho o meu aish ali primeiro ele vai colocar ali as interações e aqui vai ocorrer o famoso Box né Box ali porque ele vai pegar o inteiro que tá lá na stack vai colocar isso dentro do meu arre list esse processo de colocar vai rolar um box E aí a gente tem esse Penal de performance e de novo a gente tá gastando mais tempo computacional mais processamento para fazer uma simples alocação ali do que seria um aist para lá aí a diferença do list ó é que ele não faz o Boxing então ou seja como ele tá colocando dentro dessa lista ali o inteiro esse inteiro Ali vai residir dentro da stack né Mesmo que eu tenha a criação dessa lista lá na hip mas esse Box esse unboxing não vai acontecer tá então no primeiro cenário a gente tá tendo um processo de box no segundo cenário a gente não tá tendo um processo de box box e unboxing né então daí que vem essa diferença gritante que a gente acabou de ver esse tipo aqui né esse ail list aqui ele se você olhar lá nas especificações dele né ele é ah uma estrutura que vai ó fazer o quê o Object você lembra que o Object vai lá na na outra memória né na memória rip então quando eu faço Instância de Array list ele tá criando para mim uma lista vazia de Object Object vai onde Object vai lá na memória hiip memória hiip para fazer essa comparação aqui ela vai fazer o box unbox então literalmente você tá usando uma estrutura de dados você poderia substituir obviamente por outra estrutura de dados tá melhor ainda se a gente já souber Então deixa eu quar um outro método aqui ó medir método C tá E aí fica mais fácil ainda medir método C eh aqui eu vou fazer diferente aqui eu vou fazer um ao invés de passar uma lista vou criar uma Array de inteiro chamar de lista também vou passar o new int com o tamanho o que eu tô fazendo aqui é diferente num cenário que você já sabe quanto de dados Você pode ter nesse caso aqui eu preciso de uma rede de 1 milhão aqui de inteiros por exemplo né então se eu já coloco esse valor né se eu já inicializo ele dessa forma diferente de uma lista ou diferente aqui desse aish que eu não estou especificando Qual o tamanho dele para começar aí eu tenho mais performance ainda porque aqui eu posso fazer um list e passar o valor daquela interação aqui então aqui eu já sei se você tem um cenário que você já sabe quantos dados você vai receber já inicializa a sua estrutura de dados com o tamanho específico 10. 000 100.