CA1839: usar Environment.ProcessPath em vez de Process.GetCurrentProcess().MainModule.FileName
Property | Valor |
---|---|
ID da regra | CA1839 |
Título | Use Environment.ProcessPath em vez de Process.GetCurrentProcess().MainModule.FileName |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como sugestão |
Causa
Usar Process.GetCurrentProcess().MainModule.FileName
para obter o caminho para o arquivo que iniciou o processo em vez de Environment.ProcessPath.
Descrição da regra
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
é caro:
- Ele aloca uma instância Process e ProcessModule, geralmente apenas para obter o
FileName
. - A instância Process precisa ser descartada, o que tem um impacto no desempenho.
- É fácil esquecer de chamar Dispose() na instância Process.
- Se nada mais além de
FileName
usar a instânciaProcess
, o tamanho vinculado aumentará desnecessariamente aumentando o grafo de tipos referenciados. - É um pouco difícil descobrir ou localizar essa API.
System.Environment.ProcessPath
evita todas essas desvantagens e produz as mesmas informações.
Observação
System.Environment.ProcessPath está disponível a partir do .NET 6.
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 snippets de código a seguir mostram uma violação da regra e como corrigi-la:
using System.Diagnostics;
class MyClass
{
void MyMethod()
{
string path = Process.GetCurrentProcess().MainModule.FileName; // Violation occurs
}
}
Imports System.Diagnostics
Class MyClass
Private Sub MyMethod()
Dim path As String = Process.GetCurrentProcess().MainModule.FileName ' Violation occurs.
End Function
End Class
using System.Diagnostics;
class MyClass
{
void MyMethod()
{
string path = System.Environment.ProcessPath; // Violation fixed
}
}
Imports System.Diagnostics
Class MyClass
Private Sub MyMethod()
Dim path As String = System.Environment.ProcessPath ' Violation fixed.
End Function
End Class
Dica
Uma correção de código está disponível para essa regra no Visual Studio. Para usá-la, posicione o cursor sobre a violação e pressione Ctrl+. (ponto). Escolha Usar 'Environment.ProcessPath' na lista de opções que foi apresentada.
Quando suprimir avisos
É seguro suprimir uma violação dessa regra se você não estiver preocupado com o impacto no desempenho causado pela alocação desnecessária e eventual descarte das instâncias Process e ProcessModule.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1839.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.