Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| 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 10 | 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
Idde usar aProcessinstâ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.