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.