CA1839: Use 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 |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como sugestão |
Motivo
Usando 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 um Process e ProcessModule instância, geralmente apenas para obter o
FileName
. - 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
FileName
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.ProcessPath
evita todas essas desvantagens e produz as mesmas informações.
Nota
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 trechos 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
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.ProcessPath' na 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 das Process instâncias e ProcessModule instâncias.
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 CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839
Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1839.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.