Que massa, usa sim, eu gosto demais de usar no dia a dia... caro que não da para usar em tudo rs Mas em vários pontos eu deixo ali, até para conseguir ir aconpanhando e vendo como as alteraçoes impactam em performace e tal. Qualquer dúvida ai implementando, ou qualquer sugestão de conteúdo, manda ai! Abração e sucesso!
Fala Vagner, obrigado demais pelo feedback! Fico feliz demais com ele =) Ali sobre a questão de jogar para uma static é porque o benchmark vai acabar rodando o método marcado com [Benchmark] diversas vezes, e se eu deixasse a regex como uma variavel comum ela seria recriada estas diversas vezes, só que o Compiled apesar de ser mais rapido para executar o Match da regex ele fica bem mais lendo na criaçao do objeto, se eu executasse a criacao em todas as iteraçoes do benchmark eu acabaria tendo uma performance até pior que sem o compiled. (Lembrando que o Compiled ainda ocorre em runtime e não em compile time...) Então criando ele estático e separado, ele será criado apenas uma vez e eu posso reusá-lo ali várias vezes sem a penalidade de criação.
Bom dia Paulo! Perdão o delay na resposta, estava off estes dias... Bom, ótima pergunta, antes porém apenas uma ressalva, benchmark não é como testes unitários que precisamos por toda parte, podemos e devemos e4scolher o que fazer benchmark, o que realmente afeta performance e está no hot path do software. Dito isto, se ficar inviável ali na program de usar separados, uma outra abordagem seria usar o switcher: BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args); Ele já reconhecerá todos daquele assembly ou dos assemblies que passar, e também abrirá para receber parametros pela cli. Mas confesso que aqui acabamos por usar um a um mesmo, visto que temos cerca de uns 10 testes de benchmark apenas. Forte abraço!
@@wilsonneto-dev obrigado pela resposta, uma outra dúvida eu posso usar o teste de benchmark em conjunto com teste unitário? Exemplo crio um decorator da class que irei testar, pego e coloco benchmark nos métodos dela e em outra classe crio os testes unitarios chamando o decorator, assim teste de forma como se fosse um teste unitário, cuspindo resultado de benchmark? O projeto ficaria como projeto de teste e não console applcation.
Muito bom. Copiei aqui a solução, a única coisa que fiz diferente foi definir o regex fora do método como um atributo readonly - private readonly Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); - Pra evitar a redefinição do mesmo objeto em um loop que não é uma boa prática e o Mean diminuiu pra 1/10.
Parabéns !!
Muito bom, excelente, esse video que parece ser pequeno para voce, me ajudou bastante na evolução e ate mesmo procruar mais sobre o Benchmark
Fico feliz demais pelo feedback :)
Sucesso ai!
Muito bom Wilson Neto, parabéns! Explicação muito boa. Já vou usar em alguns refactories que preciso fazer.
Que massa, usa sim, eu gosto demais de usar no dia a dia... caro que não da para usar em tudo rs Mas em vários pontos eu deixo ali, até para conseguir ir aconpanhando e vendo como as alteraçoes impactam em performace e tal. Qualquer dúvida ai implementando, ou qualquer sugestão de conteúdo, manda ai! Abração e sucesso!
Excelente vídeo, obrigado Wilson!
Eu quem agradeço o feedback! Fico feliz em ter ajudado :)
Abração e sucesso ai!
👏👏👏
Excelente conteúdo
Muito obrigado pelo feedback =)
Vejo você nas classes do Elemar kkkk
Não entendi muito bem no regex compile, criar uma variável static, conseguiria explicar melhor? Mas um baita vídeo top! Parabéns
Fala Vagner, obrigado demais pelo feedback! Fico feliz demais com ele =)
Ali sobre a questão de jogar para uma static é porque o benchmark vai acabar rodando o método marcado com [Benchmark] diversas vezes, e se eu deixasse a regex como uma variavel comum ela seria recriada estas diversas vezes, só que o Compiled apesar de ser mais rapido para executar o Match da regex ele fica bem mais lendo na criaçao do objeto, se eu executasse a criacao em todas as iteraçoes do benchmark eu acabaria tendo uma performance até pior que sem o compiled. (Lembrando que o Compiled ainda ocorre em runtime e não em compile time...) Então criando ele estático e separado, ele será criado apenas uma vez e eu posso reusá-lo ali várias vezes sem a penalidade de criação.
Eu queria entender, no caso se eu precisar ter varios testes, não ficaria complexo tudo no program? como é feito em projeto real isso ?
Bom dia Paulo! Perdão o delay na resposta, estava off estes dias... Bom, ótima pergunta, antes porém apenas uma ressalva, benchmark não é como testes unitários que precisamos por toda parte, podemos e devemos e4scolher o que fazer benchmark, o que realmente afeta performance e está no hot path do software. Dito isto, se ficar inviável ali na program de usar separados, uma outra abordagem seria usar o switcher:
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
Ele já reconhecerá todos daquele assembly ou dos assemblies que passar, e também abrirá para receber parametros pela cli.
Mas confesso que aqui acabamos por usar um a um mesmo, visto que temos cerca de uns 10 testes de benchmark apenas.
Forte abraço!
@@wilsonneto-dev obrigado pela resposta, uma outra dúvida eu posso usar o teste de benchmark em conjunto com teste unitário? Exemplo crio um decorator da class que irei testar, pego e coloco benchmark nos métodos dela e em outra classe crio os testes unitarios chamando o decorator, assim teste de forma como se fosse um teste unitário, cuspindo resultado de benchmark? O projeto ficaria como projeto de teste e não console applcation.
Muito bom. Copiei aqui a solução, a única coisa que fiz diferente foi definir o regex fora do método como um atributo readonly - private readonly Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); - Pra evitar a redefinição do mesmo objeto em um loop que não é uma boa prática e o Mean diminuiu pra 1/10.
Massa, com certeza, ali foi pelo exemplo, mas bem melhor mesmo
Como sempre muito bom
Muito obrigado pelo feedback =)