Um jeito fácil de medir a performance do seu método
#
Introdução
Medir o tempo de execução de métodos é essencial para otimizar aplicações, seja para profiling, monitoramento de performance ou detecção de degradações ao longo do tempo. Embora existam várias ferramentas e bibliotecas disponíveis para essa finalidade, muitas vezes procuramos soluções que sejam diretas e não intrusivas.
#
A Solução: MethodTimer
Uma das maneiras mais eficientes e limpas de medir a performance de métodos em C# é utilizando a biblioteca MethodTimer.Fody. Essa ferramenta permite adicionar automaticamente cronômetros aos métodos desejados através de um simples atributo, sem a necessidade de modificar o código existente.
#
Como funciona
Após instalar a biblioteca MethodTimer no seu projeto, basta adicionar o atributo [Time]
acima de qualquer método que você deseja monitorar. Veja um exemplo:
public class MyClass
{
[Time]
public void MyMethod()
{
// Seu código aqui
Console.WriteLine("Executando método monitorado.");
}
}
Quando você executa seu código, a biblioteca automaticamente injeta a lógica de cronometragem, e a saída de debug mostrará o tempo de execução do método.
public class MyClass
{
public void MyMethod()
{
var cronometro = Stopwatch.StartNew();
try
{
// Seu código aqui
Console.WriteLine("Executando método monitorado.");
}
finally
{
cronometro.Stop();
Trace.WriteLine("MyClass.MyMethod " + cronometro.ElapsedMilliseconds + "ms");
}
}
}
Agora, você pode estar se perguntando: “O que posso fazer com essas informações, disponíveis apenas no debug console?” Aqui está uma sugestão: crie uma classe utilitária como a abaixo.
using System.Reflection;
namespace JokerCharge
{
public static class MethodTimeLogger
{
public static ILogger Logger;
public static void Log(MethodBase methodBase, TimeSpan elapsed, string message)
{
Logger.LogTrace("{Classe}.{Método} {Duração}", methodBase.DeclaringType!.Name, methodBase.Name, elapsed);
}
}
}
Não se esqueça de adicionar isso à sua classe Program:
var app = builder.Build();
MethodTimeLogger.Logger = app.Logger;
E atualize o appSettings para registrar no trace:
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Microsoft.AspNetCore": "Warning"
}
}
}
Com tudo configurado, você pode logar e injetar as informações que desejar.
#
Benefícios
- Simplicidade: Não é necessário escrever código adicional de cronometragem.
- Automatização: A medição de performance é adicionada em tempo de compilação, mantendo seu código limpo.
- Facilidade de Uso: Basta adicionar um atributo ao método desejado.
#
Conclusão
MethodTimer.Fody é uma ferramenta poderosa para desenvolvedores que buscam uma maneira eficiente e descomplicada de medir a performance de seus métodos em C#. Com a facilidade de integração e o mínimo impacto no código existente, é uma excelente escolha para qualquer projeto.