ASP .NET
Core - Dicas de desempenho
![]() |
Neste artigo veremos algumas dicas para aumentar o desempenho das aplicações ASP .NET Core. |
O desempenho é muito importante; é um fator importante para o sucesso de qualquer aplicação web. As novas versões da ASP.NET Core 3.0 incluíram vários aprimoramentos que reduzem o uso de memória e melhoram a o desempenho.
A seguir veremos algumas orientações para usar esses recursos baseadas na
documentação da Microsoft:
(fonte:
https://docs.microsoft.com/pt-br/aspnet/core/performance/performance-best-practices?view=aspnetcore-3.1)
1- Prefira usar chamadas assíncronas
Tente evitar chamadas síncronas ao desenvolver aplicativos ASP.NET Core. A chamada síncrona bloqueia a próxima execução até que a execução atual seja concluída. Ao buscar dados de uma API ou executar operações como operações de entrada e saída (E/S) ou chamada independente, execute a chamada de maneira assíncrona.
Assim todas as chamadas a API com acesso a dados devem ser assíncronas.
Evite usar Task.Wait e Task.Result
e tente usar await.
Assim evite usar o código abaixo que usa uma chamada síncrona:
public class BadStreamReaderController : Controller
{
[HttpGet("/contoso")]
public ActionResult<ContosoData> Get()
{
var json = new StreamReader(Request.Body).ReadToEnd();
return JsonSerializer.Deserialize<ContosoData>(json);
}
}
|
E prefira usar este código assíncrono:
public class GoodStreamReaderController : Controller
{
[HttpGet("/contoso")]
public async ActionResult<ContosoData> Get()
{
var json = await new StreamReader(Request.Body).ReadToEnd();
return JsonSerializer.Deserialize<ContosoData>(json);
}
}
|
Neste exemplo não existe o bloqueio da thread durante a leitura dos dados.
2- Utilize consulta assíncronas
As consultas assíncronas evitam o bloqueio de uma thread enquanto a consulta é executada no banco de dados. As consultas assíncronas são importantes para aplicativos clientes rápidos e responsivos.
Exemplos: ToListAsync(), ToArrayAsync(), SingeAsync()
public async Task<List> GetBlogsAsync()
{
using (var context = new BloggingContext())
{
return await context.Blogs.ToListAsync();
}
}
|
3- Salve dados de forma assíncrona
O salvamento assíncrono evita um bloqueio na thread enquanto as alterações são gravadas no banco de dados. Ao usar o EF Core temos acesso ao método DbContext.SaveChangesAsync() como uma alternativa assíncrona ao método síncrono DbContext.SaveChanges().
public static async Task AddBlogAsync(string url)
{
using (var context = new BloggingContext())
{
var blogContent = new BlogContent { Url = url };
context.Blogs.Add(blogContent);
await context.SaveChangesAsync();
}
}
|
4- Procure otimizar o acesso aos dados
Procure melhorar o
desempenho de uma aplicação, otimizando sua lógica de acesso a dados. A maioria
dos aplicativos depende totalmente de um banco de dados. Eles precisam buscar
dados do banco de dados, processar os dados e exibi-los. Se este for um processo
demorado, o aplicativo levará muito mais tempo para carregar.
Algumas recomendações para otimizar a lógica de acesso a dados:
5- Use o cache
Podemos aumente o
desempenho de uma aplicação reduzindo o número de solicitações para o servidor.
Evite requisições para o servidor toda vez e armazene em cache os dados.
Armazene a resposta para o futuro e use-a na próxima vez em que fizer um
request para a mesma resposta.
A seguir algumas técnicas de armazenamento em cache:
6- Use a serialização JSON
A partir da ASP .NET Core 3.0 podemos usar o namespace System.Text.Json para serialização JSON por padrão. Agora, você pode ler e gravar JSON de forma assíncrona obtendo um melhor desempenho do que usar o pacote Newtonsoft.Json. Este pacote oferece os seguintes recursos para processamento JSON:
-
Alta performance;
- Alocação baixa;
- Recursos compatíveis com padrões;
- Serialização de objetos para texto JSON e desserialização de texto JSON para
objetos;
7- Reduza as requisições HTTP
Reduzir o número
de requisições HTTP é uma das principais otimizações. Coloque em cache as
páginas da web e evite redirecionamentos do lado do cliente para reduzir o
número de conexões feitas com o servidor da web.
Use as seguintes técnicas para reduzir as solicitações HTTP:
- Use minificação.
- Use agrupamento.
- Use imagens sprite.
Reduzindo as requisições HTTP, essas técnicas ajudam as páginas a carregar mais rapidamente.
8- Lance exceções somente quando necessário
Exceções devem ser
raras. Lançar e capturar exceções consumirá mais tempo em relação a outros
padrões de fluxo de código. Assim procure não criar e capturar exceções no fluxo
normal do programa e use exceções somente quando forem necessárias.
Recomendações:
9- Use a
compactação do response
A compactação de resposta, que compacta o tamanho de um arquivo, é outro fator
para melhorar o desempenho. Na ASP.NET Core, a compactação de resposta está
disponível como um componente de middleware.
Geralmente, as respostas não são compactadas nativamente. Isso geralmente inclui
CSS, JavaScript, HTML, XML e JSON.
Obs: O pacote Microsoft.AspNetCore.ResponseCompression é implicitamente incluído nas aplicações ASP .NET Core.
O trecho de código a seguir mostrar um exemplo de como habilitar o middleware de compressão de resposta para os tipos MIME padrão e os provedores de compressão :
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCompression();
}
}
|
Os provedores são:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options =>
{
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
options.Providers.Add<CustomCompressionProvider>();
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "image/svg+xml" });
});
}
|
10- Use os novos recursos de acessabilidade HttpContext
A acessibilidade do HttpContext é válida apenas desde que haja uma solicitação HTTP ativa na ASP.NET Core.
A seguir vou deixar o link de algumas sugestões para acessar o HttpContext na documentação da Microsoft de forma a otimizar o desempenho da aplicação:
Essas são algumas recomendações que vão aumentar o desempenho da sua aplicação ASP .NET Core.
E estamos conversados.
"(Disse Jesus) Ainda um pouco, e o
mundo não me verá mais, mas vós me vereis; porque eu vivo, e vós vivereis."
João 14:19
Referências:
ASP .NET Core - Implementando a segurança com .
ASP.NET Core MVC - Criando um Dashboard .
C# - Gerando QRCode - Macoratti
Dicas para boas práticas de programação
ASP .NET - Gerando QRCode com a API do Google
Visual Studio - Dicas de Produtividade VII
.NET - Dicas de site com livros gratuitos para ...
ASP .NET MVC 5 - 10 boas práticas que fazem a diferença
eBook - 25 dicas para melhorar o desempenho ...