Partilhar via


CA1837: Use Environment.ProcessId em vez de Process.GetCurrentProcess(). Id

Property valor
ID da regra CA1837
Título Use Environment.ProcessId em vez de Process.GetCurrentProcess(). Id
Categoria Desempenho
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

Esta regra localiza chamadas e System.Diagnostics.Process.GetCurrentProcess().Id sugere o uso System.Environment.ProcessId em vez disso, porque é mais eficiente.

Descrição da regra

System.Diagnostics.Process.GetCurrentProcess().Id é caro:

  • Ele aloca uma Process instância, geralmente apenas para obter o Id.
  • A Process instância precisa ser descartada, o que tem um impacto no desempenho.
  • É fácil esquecer de recorrer Dispose()Process à instância.
  • Se nada além Id de usar a Process instância, então o tamanho vinculado cresce desnecessariamente aumentando o gráfico de tipos referenciados.
  • É um pouco difícil descobrir ou encontrar esta API.

System.Environment.ProcessId evita tudo o que foi dito acima.

Nota

A regra CA1837 está disponível a partir do .NET 5.0.

Como corrigir violações

A violação pode ser corrigida manualmente ou, em alguns casos, usando ações rápidas para corrigir o código no Visual Studio.

Os dois trechos de código a seguir mostram uma violação da regra e como corrigi-la:

using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        int pid = Process.GetCurrentProcess().Id;
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim pid As Integer = Process.GetCurrentProcess().Id
    End Function
End Class
using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        int pid = System.Environment.ProcessId;
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim pid As Integer = System.Environment.ProcessId
    End Function
End Class

Gorjeta

Uma correção de código está disponível para essa regra no Visual Studio. Para usá-lo, posicione o cursor sobre a violação e pressione Ctrl+. Escolha Usar 'Environment.ProcessId' em vez de 'Process.GetCurrentProcess(). Id' da lista de opções apresentada.

Code fix for CA1837 - Use 'Environment.ProcessId' instead of 'Process.GetCurrentProcess().Id'

Quando suprimir avisos

É seguro suprimir uma violação dessa regra se você não estiver preocupado com o impacto no desempenho da alocação desnecessária e eventual descarte de uma Process instância.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA1837
// The code that's violating the rule is on this line.
#pragma warning restore CA1837

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1837.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também