A Cadência de Lançamentos do .NET Continua Acelerando
A Microsoft lançou o .NET 9 em novembro de 2024 como uma versão Standard Term Support (STS), e a velocidade das melhorias não dá sinais de desaceleração. Com mais de 7.500 pull requests mesclados somente no repositório dotnet/runtime, o .NET 9 é a versão mais rápida e mais capaz da plataforma até hoje.
Mas "mais rápido" é abstrato. Como desenvolvedores, precisamos saber: o que realmente mudou, o que torna nosso código melhor e vale a pena atualizar?
Este guia detalha cada melhoria relevante do .NET 8 para o .NET 9 — desde os recursos de linguagem do C# 13 até os ganhos de desempenho em tempo de execução, a integração com IA e os aprimoramentos do ASP.NET Core — para que você possa tomar uma decisão embasada para a sua equipe.
C# 13: Recursos de Linguagem Que Você Realmente Vai Usar
O C# 13 acompanha o SDK do .NET 9 e introduz vários recursos que reduzem o código repetitivo e melhoram a segurança:
Coleções com params
Anteriormente, params era limitado a arrays. O C# 13 estende o suporte de params para qualquer tipo de coleção que implemente IEnumerable<T> e tenha um método Add — incluindo List<T>, Span<T> e ReadOnlySpan<T>. Isso elimina alocações desnecessárias de array ao chamar métodos com argumentos variáveis.
Novo Tipo Lock e Sua Semântica
O tipo System.Threading.Lock substitui o tradicional padrão lock (obj) { } por um tipo dedicado que o compilador reconhece. A nova palavra-chave lock funciona com objetos Lock para produzir código mais eficiente, com suporte aprimorado à depuração.
Interfaces em ref struct
Tipos ref struct agora podem implementar interfaces e ser usados como argumentos de tipo em generics. Isso viabiliza padrões como abstrações de alto desempenho baseadas em span que antes eram impossíveis devido a restrições de tipo.
Propriedades e Indexadores Parciais
Propriedades e indexadores parciais agora são permitidos em tipos parciais, tornando os geradores de código-fonte mais expressivos. Autores de bibliotecas podem declarar propriedades parciais no código gerado enquanto as implementações ficam no código do usuário — um padrão que simplifica drasticamente arquiteturas orientadas a geradores de código-fonte.
Prioridade de Resolução de Sobrecarga
Autores de bibliotecas agora podem designar uma sobrecarga como melhor que as outras usando o atributo [OverloadResolutionPriority]. Isso elimina erros de compilação por chamada ambígua ao adicionar novas sobrecargas a APIs existentes sem quebrar os consumidores.
Acesso Implícito a Indexador em Inicializadores de Objeto
Agora você pode usar o operador ^ (índice a partir do fim) em inicializadores de objeto, tornando a inicialização de coleções mais expressiva ao preencher a partir do fim de uma sequência.
Desempenho em Tempo de Execução: Cada Ciclo Conta
A história de desempenho do .NET 9 se baseia em centenas de melhorias direcionadas que se acumulam em aplicações reais. Veja os destaques:
Dynamic PGO: Agora Otimizando Casts e Ramificações
A Otimização Dinâmica Guiada por Perfil (PGO) — introduzida no .NET 8 — agora vai além do despacho virtual para incluir otimizações de cast. O JIT rastreia os tipos mais comuns encontrados durante as operações obj is T e (T)obj e então gera caminhos rápidos para esses tipos. Em microbenchmarks, as operações de verificação de tipo rodam até 4x mais rápido nos caminhos comuns.
Otimizações de Laço: Redução de Força e Contagem Decrescente
O JIT agora realiza redução de força em laços de iteração de arrays, convertendo o acesso baseado em índice em aritmética de ponteiros. Combinado com a contagem decrescente automática (substituindo cmp + jl por um único jns), laços apertados eliminam uma instrução por iteração. Para laços em caminhos críticos sobre grandes coleções, isso soma rapidamente.
Eliminação de Verificação de Limites: Mais Inteligente do Que Nunca
A análise de verificação de limites do JIT agora lida com padrões antes ignorados — indexação reversa, condições de laço complexas e acessos baseados em span que interagem com verificações de tamanho anteriores. Menos verificações de limites significam laços mais apertados e menos ramificações que podem sofrer previsão incorreta.
Coleta de Lixo: Adaptação Dinâmica
O Server GC agora inclui adaptação dinâmica ao tamanho da aplicação, habilitada por padrão. O GC ajusta seu comportamento com base nos padrões reais de memória da aplicação, em vez de heurísticas fixas, reduzindo os tempos de pausa para cargas de trabalho intensivas em memória sem sacrificar a taxa de transferência.
Vetorização e Arm64
A geração de código para Arm64 recebeu atenção significativa, com vetorização SIMD ampliada e melhor uso de instruções específicas do Arm. Para cargas de trabalho em nuvem rodando em processadores Graviton ou Ampere, isso se traduz diretamente em custos de computação menores.
ASP.NET Core 9: Seguro por Padrão, Mais Rápido por Design
O ASP.NET Core 9 torna as melhorias de segurança automáticas enquanto eleva ainda mais o teto de desempenho:
Geração Integrada de Documento OpenAPI
O novo pacote Microsoft.AspNetCore.OpenApi oferece geração integrada de documentos OpenAPI sem exigir Swashbuckle ou NSwag. Metadados de minimal APIs, controllers e anotações de tipo são refletidos automaticamente nas especificações OpenAPI geradas — reduzindo a rotatividade de dependências e melhorando a compatibilidade.
Fingerprinting de Ativos Estáticos
A otimização em tempo de build e de publicação de arquivos estáticos (JavaScript, CSS) agora inclui versionamento automático com fingerprint. O cache-busting torna-se automático, eliminando uma fonte comum de bugs de ativos desatualizados.
Melhorias no Blazor
Novos templates Hybrid e Web App simplificam a configuração de projetos. A detecção do modo de renderização de componentes melhora a depuração. A experiência de reconexão do Blazor Server foi redesenhada, proporcionando aos usuários uma experiência mais fluida quando as conexões de rede caem.
Expansão do Native AOT
O suporte à compilação ahead-of-time no ASP.NET Core foi ampliado, reduzindo a latência de inicialização a frio e o consumo de memória. Para microsserviços em contêineres, o Native AOT significa imagens menores e eventos de escalonamento mais rápidos.
Certificado de Desenvolvimento HTTPS no Linux
Configurar um certificado de desenvolvimento confiável no Linux para HTTPS durante o desenvolvimento ficou significativamente mais fácil — uma melhoria de qualidade de vida para equipes que desenvolvem em estações de trabalho Linux.
Blocos de Construção de IA: o .NET Passa a Ter IA Nativa
O .NET 9 introduz uma camada unificada de abstração de IA, posicionando o .NET como uma plataforma de primeira classe para aplicações baseadas em IA:
Microsoft.Extensions.AI
Um conjunto de abstrações em C# para interagir com serviços de IA — modelos de linguagem pequenos e grandes (SLMs e LLMs), embeddings e vector stores. Esses pacotes fornecem um modelo de programação consistente, seja você chamando OpenAI, Azure OpenAI ou modelos locais por meio do ONNX Runtime.
Tensor<T> e TensorPrimitives
O novo tipo Tensor<T> oferece manipulação eficiente de dados multidimensionais com interoperabilidade zero-copy com ML.NET, TorchSharp e ONNX Runtime. O TensorPrimitives expandiu de 40 para quase 200 operações otimizadas para SIMD — cobrindo os primitivos numéricos necessários para inferência e engenharia de atributos.
ML.NET 4.0
O ML.NET 4.0 traz o carregamento de modelos ONNX como Stream, novo suporte a tokenizadores para modelos GPT, Llama, Phi e Bert, e ports experimentais em TorchSharp das famílias de modelos Llama e Phi. Se você está construindo aplicações .NET que precisam de inferência de IA on-device ou em processo, esta é a versão que torna isso prático.
Biblioteca de Tokenizadores
A biblioteca Microsoft.ML.Tokenizers agora oferece suporte nativo a Tiktoken (GPT-3/4/4o/o1), Llama, CodeGen, Phi2 e tokenizadores Bert. Isso é essencial para gerenciar janelas de contexto, calcular custos de tokens e pré-processar texto para modelos locais.
EF Core 9: Cosmos DB e Consultas Pré-Compiladas
O Entity Framework Core 9 foca em duas áreas: integração mais profunda com o Azure Cosmos DB para NoSQL e a base para a compilação ahead-of-time:
- Provedor do Cosmos DB: Atualizações significativas para o provedor NoSQL, incluindo melhor tradução de LINQ, suporte a chaves de partição hierárquicas e melhor gerenciamento de throughput.
- Consultas Pré-Compiladas: Passos rumo a consultas compiladas com AOT que eliminam a sobrecarga de compilação de consultas em tempo de execução — crítico para o desempenho de inicialização a frio em ambientes serverless e em contêineres.
- Melhorias em Tipos Complexos: Melhor tratamento de entidades owned e objetos de valor, reduzindo o código repetitivo necessário para modelos de domínio ricos.
.NET MAUI: Desempenho e Integração com Desktop
O .NET MAUI no .NET 9 prioriza desempenho e recursos de desktop:
- CollectionView e CarouselView receberam novas implementações, mais performáticas, no iOS e no Mac Catalyst.
- HybridWebView facilita a incorporação de conteúdo React, Vue.js ou Angular dentro de apps MAUI.
- Controle TitleBar para aplicações de desktop no Windows, oferecendo personalização nativa da barra de título.
- Melhorias em Native AOT e Trimming reduzem o tamanho do app e o tempo de inicialização em dispositivos móveis.
.NET 8 vs .NET 9: Comparação Lado a Lado
| Categoria | .NET 8 | .NET 9 |
|---|---|---|
| Tipo de Lançamento | LTS (3 anos de suporte) | STS (2 anos de suporte) |
| Versão do C# | C# 12 | C# 13 |
| Dynamic PGO | Despacho virtual/de interface | Adiciona casts, ramificações, perfilamento de inteiros |
| Abstrações de IA | Nenhuma (apenas pacotes NuGet) | Microsoft.Extensions.AI, Tensor<T> |
| OpenAPI | Terceiros (Swashbuckle) | Integrado com Microsoft.AspNetCore.OpenApi |
| Modo do GC | Server/workstation fixo | Adaptação dinâmica ao tamanho do app |
| ref struct | Não pode implementar interfaces | Pode implementar interfaces, usado como argumento genérico |
| Otimizações de Laço | Reconhecimento básico de laços | Redução de força, contagem decrescente |
| LINQ | Operadores padrão | Adiciona CountBy, AggregateBy |
| Native AOT | Suporte limitado no ASP.NET | Suporte ampliado no ASP.NET |
Você Deveria Atualizar?
Atualize Imediatamente Se:
- Você executa cargas de trabalho sensíveis ao desempenho e pode se beneficiar das otimizações de JIT, GC e laços.
- Você está construindo recursos baseados em IA — as novas abstrações
Microsoft.Extensions.AIe o suporte a tokenizadores já valem a migração por si só. - Você está implantando em Arm64 (Graviton, Ampere) — as melhorias na geração de código Arm64 reduzem diretamente os custos de nuvem.
- Você mantém bibliotecas NuGet — recursos do C# 13 como
[OverloadResolutionPriority]e propriedades parciais melhoram a experiência de autoria de bibliotecas.
Considere o Cronograma Se:
- Você precisa de suporte LTS — o .NET 8 permanece suportado até novembro de 2027. Se a sua organização exige LTS por conformidade, planeje sua migração para o .NET 10 (LTS) enquanto adota o .NET 9 para novos projetos.
- Você depende de pacotes de terceiros que ainda não adicionaram alvos para .NET 9 — verifique se suas dependências críticas suportam
net9.0antes de migrar.
Para Usuários de nopCommerce e Umbraco:
- O nopCommerce 4.90 tem como alvo o .NET 9 nativamente — se você está na 4.80 ou anterior, atualizar para a 4.90 lhe dá todas essas melhorias automaticamente.
- O Umbraco 14+ roda no .NET 9 — todos os mais de 20 plugins Umbraco da SplatDev foram migrados e testados para compatibilidade com o .NET 9.
Caminho de Atualização: Um Checklist Prático
- Instale o SDK do .NET 9: Baixe em dotnet.microsoft.com.
- Atualize o Target Framework: Altere
<TargetFramework>net8.0</TargetFramework>para<TargetFramework>net9.0</TargetFramework>em todos os arquivos .csproj. - Atualize as Referências de Pacotes: Atualize todos os pacotes NuGet para suas versões mais recentes que suportam o .NET 9.
- Trate as Breaking Changes: Revise a lista oficial de breaking changes — a superfície é pequena para a maioria das aplicações.
- Habilite os Novos Recursos: Defina
<LangVersion>13</LangVersion>para usar os recursos do C# 13. - Execute sua Suíte de Testes: Regressão completa em testes unitários, de integração e E2E.
- Faça Benchmark Antes/Depois: Use o BenchmarkDotNet para quantificar as melhorias de desempenho na sua carga de trabalho específica.
Conclusão
O .NET 9 não é um lançamento revolucionário de chamar atenção. É o tipo de lançamento que, silenciosamente, melhora tudo — seus laços rodam com menos instruções, suas verificações de tipo atingem caminhos rápidos, seu GC se adapta à sua aplicação e suas especificações de API são geradas automaticamente. Essas melhorias se acumulam em cada requisição HTTP, cada consulta ao banco de dados, cada ciclo de renderização do Blazor.
Para equipes ainda no .NET 6 ou .NET 7, o ganho acumulado do .NET 6 para o .NET 9 é dramático — ganhos de desempenho de 20 a 40% em cargas de trabalho comuns, uma linguagem C# modernizada, integração de IA nativa e um runtime otimizado para contêineres.
Na SplatDev, construímos sobre o .NET desde a versão 1.0, em 2009. Vimos a plataforma crescer de exclusiva do Windows para verdadeiramente multiplataforma, de código fechado para totalmente aberto, de exclusiva para empresas para nativa da nuvem. O .NET 9 representa a versão mais capaz da plataforma com a qual já trabalhamos — e já estamos colocando cargas de trabalho de produção nela.
Pronto para atualizar sua stack .NET? A SplatDev oferece serviços de migração para .NET, otimização de desempenho e desenvolvimento full-stack — de nopCommerce e Umbraco a aplicações corporativas personalizadas.
Ou entre em contato diretamente: [email protected]