Programação Assíncrona C#: Task vs ValueTask Desmistificado
Performance em .NET: Medição, Diagnóstico e Otimização
Velocidade não é luxo, é requisito básico! Imagine um carro lindo que quebra a cada 5km. Assim é seu código: mesmo funcional, se não performa, frustra usuários e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. custa caro. Neste artigo, você vai aprender a medir, diagnosticar e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. otimizar performance em aplicações .NET
📊 Monitoramento com Prometheus: Métricas em Tempo Real!Descubra como implementar o Prometheus para monitoramento em sistemas .NET, com métricas em tempo real e dashboards inteligentes. como um expert!
- "Mas teste de performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! não é só para sistemas gigantes?"
Errado! Mesmo um CRUD simples pode ter gargalos que destroem a experiência🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! do usuário. Vamos desmistificar técnicas profissionais de forma prática!
📌 Índice🔗
- Por que Performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! é o Novo Funcional?
- Ferramentas do Arsenal .NET
- Benchmark.NET
⏱️ Benchmark.NET: Meça a Velocidade do Seu Código!Aprenda a usar o Benchmark.NET para medir a performance de seu código com precisão. Descubra dicas, práticas confiáveis e evite erros comuns.: Cronômetro Científico
- Perfilando com dotnet-counters
- Testando APIs
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. HTTP com Artilharia Pesada
- Gargalos Comuns (e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Como Desentupir)
- Desafio Prático: Operação Tuning
🚀 Por que Performance é o Novo Funcional?🔗
Um estudo da Amazon mostrou que 100ms de atraso reduzem vendas🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. em 1%. Em apps .NET, problemas comuns são:
// Exemplo ingênuo: concatenação de strings em loop
string result = "";
for (int i = 0; i < 10000; i++)
{
result += i.ToString(); // Alocações massivas!
}
Impactos por audiência:
- Product Managers: Performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! impacta diretamente métricas de negócio (NPS, conversão)
- Devs .NET
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! Legacy: Novas versões do .NET trazem ganhos de 30-40% em throughput
- QAs: Testes de carga previnem outages em lançamentos críticos
🔧 Ferramentas do Arsenal .NET🔗
Ferramenta | Quando Usar | Dica Pro |
---|---|---|
BenchmarkDotNet | Micro-otimizações (métodos específicos) | Compare diferentes versões do mesmo algoritmo |
dotnet-counters | Monitoramento em tempo real | Foque em %GC, Allocations/sec |
JetBrains dotTrace | Análise detalhada de CPU/memória | Capture snapshots antes/depois das otimizações |
NBomber | Testes de carga em APIs | Simule picos com rampa de usuários realista |
⏱️ Benchmark.NET: Cronômetro Científico🔗
Vamos testar dois métodos de processamento de strings📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance.:
[SimpleJob(RuntimeMoniker.Net80)]
public class StringBenchmarks
{
[Params(1000, 10000)]
public int Size { get; set; }
[Benchmark]
public string Concatenation()
{
string result = "";
for (int i = 0; i < Size; i++)
result += i.ToString();
return result;
}
[Benchmark]
public string StringBuilder()
{
var sb = new StringBuilder();
for (int i = 0; i < Size; i++)
sb.Append(i.ToString());
return sb.ToString();
}
}
Resultado:
Method | Size | Mean | Allocated |
---|---|---|---|
Concatenation | 1000 | 124.5 μs | 739 KB |
StringBuilder | 1000 | 5.2 μs | 24 KB |
Concatenation | 10000 | 14,856.3 μs | 73,900 KB |
StringBuilder | 10000 | 54.1 μs | 240 KB |
- Conclusão: Alocações excessivas matam a performance! StringBuilder
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! é 275x mais rápido em 10k iterações.
📊 Perfilando com dotnet-counters🔗
Passo a passo para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! diagnosticar:
1. Instale o pacote: dotnet tool install --global dotnet-counters
dotnet-counters monitor --process-id PID --counters System.Runtime
- GC
⚡ Otimização Unity: Object Pooling e GC Avoidance!Descubra técnicas essenciais de Object Pooling e estratégias GC Avoidance no Unity para otimizar a performance dos seus jogos e evitar pausas indesejadas. Heap Size: Crescimento contínuo indica memory leaks
🧠 Gerenciamento de Memória: Evite Leaks como um Ninja!Descubra como gerenciar memória no .NET, evitando vazamentos e otimizando a performance com dicas práticas e exemplos reais. Aprenda agora!
- Exceptions Thrown: Exceções são caríssimas (evite try/catch
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. em hot paths)


💣 Testando APIs HTTP com Artilharia Pesada🔗
Exemplo com NBomber testando endpoint de produtos🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio.:
public class ApiLoadTest
{
public void Run()
{
var httpClient = new HttpClient();
var scenario = Scenario.Create("API Stress", async context =>
{
var response = await httpClient.GetAsync("https://api/produtos?ativo=true");
return response.IsSuccessStatusCode
? Response.Ok()
: Response.Fail();
})
.WithLoadSimulations(
Simulation.RampConstant(100, during: TimeSpan.FromSeconds(30)) // 100 usuários
);
NBomberRunner
.RegisterScenarios(scenario)
.Run();
}
}
- RPS (Requests por Segundo)
- P95 Latency (95% dos requests dentro de X ms)
- Error Rate
Gargalos Comuns (e Como Desentupir)🔗
- Sintoma: Alta alocação de memória
📉 Alocações Zero: Escreva Código Sem Gerar Lixo!Aprenda a evitar alocações desnecessárias em C# aplicando técnicas com structs, stackalloc, Span<T> e pooling para uma performance ideal. (Gen 2 collections)
- Solução: Pooling de objetos
🔄 Pooling de Objetos: Reuse Instâncias como um Ninja da Memória!Descubra como o pooling de objetos otimiza a memória e eleva a performance, evitando pausas e overhead do Garbage Collector em sistemas intensivos., usar structs
- Sintoma: Threads bloqueadas em Task.Wait()
- Solução: ConfigureAwait(false), async
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. all the way
- Sintoma: Deadlocks
🚫 Deadlocks: O que São e Como Fugir Deles!Descubra o que são deadlocks em C#, aprenda com exemplos práticos e estratégias para evitar bloqueios que travam suas aplicações e comprometer performance. em operações concorrentes
- Solução: SemaphoreSlim, código lock
🚫 Deadlocks: O que São e Como Fugir Deles!Descubra o que são deadlocks em C#, aprenda com exemplos práticos e estratégias para evitar bloqueios que travam suas aplicações e comprometer performance.-free
Exemplo de otimização:
// Antes (síncrono bloqueante)
public string GetData() => _httpClient.GetStringAsync(url).Result;
// Depois (async correto)
public async Task<string> GetDataAsync()
=> await _httpClient.GetStringAsync(url).ConfigureAwait(false);
🎯 Desafio Prático: Operação Tuning🔗
Objetivo: Otimizar um endpoint📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. de relatórios que está lento sob carga.
Passos:
git clone https://github.com/performance-lab/report-api
2. Execute🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. testes de carga com NBomber
3. Use dotTrace para identificar hot paths🔥 Hot Paths Optimization: Acelere Caminhos Críticos!Aprenda a identificar e refinar Hot Paths em seus códigos com técnicas avançadas em C# e .NET 8+. Descubra ferramentas de profiling e otimize seu software.
4. Aplique técnicas de otimização (pooling⚡ Otimização Unity: Object Pooling e GC Avoidance!Descubra técnicas essenciais de Object Pooling e estratégias GC Avoidance no Unity para otimizar a performance dos seus jogos e evitar pausas indesejadas., caching, async)
5. Documente os ganhos obtidos
Dica: O endpoint📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. tem um loop que processa 10k registros - substitua por batches paralelos!
Conclusão🔗
Performance🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! testing não é "coisa de expert" - é habilidade
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! essencial para todo dev .NET. Comece pequeno:
- Adicione benchmarks
⏱️ Benchmark.NET: Meça a Velocidade do Seu Código!Aprenda a usar o Benchmark.NET para medir a performance de seu código com precisão. Descubra dicas, práticas confiáveis e evite erros comuns. em métodos críticos
- Monitore APIs
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. em produção com Application Insights
- Automatize testes de carga no CI/CD
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.
Lembre-se: código rápido é feature! 🚀
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/