Primeiro precisaremos instalar o pacote BenchmarkDotNet NuGet em nosso projeto. Selecione o projeto na janela Solution Explorer, clique com o botão direito e selecione “Gerenciar pacotes NuGet”. Na janela NuGet Package Manager, procure o pacote BenchmarkDotNet e instale-o.
Como alternativa, você pode instalar o pacote por meio do console do NuGet Package Manager executando o comando abaixo.
dotnet add package BenchmarkDotNet
A seguir, para nossa comparação de desempenho, atualizaremos a classe Stock para incluir um bloqueio tradicional e a nova abordagem. Para fazer isso, substitua o método Update que você criou anteriormente por dois métodos, a saber, UpdateStockTraditional e UpdateStockNew, conforme mostrado no exemplo de código abaixo.
public class Stock
{
private readonly Lock _lockObjectNewApproach = new();
private readonly object _lockObjectTraditionalApproach = new();
private int _itemsInStockTraditional = 0;
private int _itemsInStockNew = 0;
public void UpdateStockTraditional(int numberOfItems, bool flag = true)
{
lock (_lockObjectTraditionalApproach)
{
if (flag)
_itemsInStockTraditional += numberOfItems;
else
_itemsInStockTraditional -= numberOfItems;
}
}
public void UpdateStockNew(int numberOfItems, bool flag = true)
{
using (_lockObjectNewApproach.EnterScope())
{
if (flag)
_itemsInStockNew += numberOfItems;
else
_itemsInStockNew -= numberOfItems;
}
}
}
Agora, para avaliar o desempenho das duas abordagens, crie uma nova classe C# chamada NewLockKeywordBenchmark e insira o código a seguir nela.