CA1839: Użyj elementu Environment.ProcessPath zamiast Process.GetCurrentProcess(). MainModule.FileName

Właściwości Wartość
Identyfikator reguły CA1839
Tytuł Użyj elementu Environment.ProcessPath zamiast Process.GetCurrentProcess(). MainModule.FileName
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Użyj polecenia Process.GetCurrentProcess().MainModule.FileName w celu pobrania ścieżki do pliku, który uruchomił proces zamiast Environment.ProcessPath.

Opis reguły

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName jest kosztowna:

  • Przydziela on wystąpienie Process i ProcessModule , zwykle tylko w celu pobrania elementu FileName.
  • Wystąpienie Process musi zostać usunięte, co ma wpływ na wydajność.
  • Łatwo zapomnieć o wywołaniu Dispose()Process wystąpienia.
  • Jeśli nic innego niż FileName używa Process wystąpienia, rozmiar połączony rośnie niepotrzebnie przez zwiększenie wykresu typów, do których odwołuje się odwołanie.
  • Odnajdywanie lub znajdowanie tego interfejsu API jest nieco trudne.

System.Environment.ProcessPath unika wszystkich tych wad i tworzy te same informacje.

Uwaga

System.Environment.ProcessPath program jest dostępny od wersji 6 platformy .NET.

Jak naprawić naruszenia

Naruszenie można naprawić ręcznie lub, w niektórych przypadkach, za pomocą szybkich akcji w celu naprawienia kodu w programie Visual Studio.

Następujące dwa fragmenty kodu pokazują naruszenie reguły i sposób jego naprawy:

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

Napiwek

Poprawka kodu jest dostępna dla tej reguły w programie Visual Studio. Aby go użyć, umieść kursor na naruszeniu i naciśnij klawisze Ctrl+. (kropka). Wybierz pozycję Użyj ścieżki "Environment.ProcessPath" z listy przedstawionych opcji.

Code fix for CA1839 - Use 'Environment.ProcessPath'

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć naruszenie tej reguły, jeśli nie obawiasz się wpływu na wydajność z niepotrzebnej alokacji i ewentualnego Process usuwania wystąpień i ProcessModule .

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz też