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 9 | 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 aProcess
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.
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 de um arquivo, pasta ou projeto, defina sua gravidade 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.