Udostępnij za pośrednictwem


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

Właściwości Wartość
Identyfikator reguły CA1839
Tytuł Użyj Environment.ProcessPath zamiast Process.GetCurrentProcess().MainModule.FileName
Kategoria Wydajność
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

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:

  • Przydzielane są wystąpienia Process i ProcessModule, zwykle tylko po to, aby uzyskać FileName.
  • Wystąpienie Process musi zostać usunięte, co ma wpływ na wydajność.
  • Łatwo zapomnieć o wywołaniu Dispose() na Process wystąpieniu.
  • Jeśli nic innego poza FileName nie używa wystąpienia Process, to powiązany rozmiar rośnie niepotrzebnie przez zwiększenie grafu typów, do których są odwołania.
  • 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 jest dostępny od wersji .NET 6.

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

Wskazówka

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

Poprawka kodu dla CA1839 — użyj polecenia

Kiedy pomijać ostrzeżenia

Można bezpiecznie zignorować naruszenie tej reguły, jeśli nie martwisz się wpływem na wydajność spowodowanym niepotrzebną alokacją i ewentualnym usunięciem instancji Process 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ż