Udostępnij za pośrednictwem


CA1837: Użyj Environment.ProcessId zamiast Process.GetCurrentProcess().Id

Właściwości Wartość
Identyfikator reguły CA1837
Tytuł Użyj elementu Environment.ProcessId zamiast elementu Process.GetCurrentProcess().Id
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

Ta reguła lokalizuje wywołania System.Diagnostics.Process.GetCurrentProcess().Id i sugeruje użycie System.Environment.ProcessId, ponieważ jest ona wydajniejsza.

Opis reguły

System.Diagnostics.Process.GetCurrentProcess().Id jest kosztowna:

  • Przydziela instancję Process, zwykle tylko w celu pobrania Id.
  • 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 Id 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.ProcessId unika wszystkich powyższych.

Uwaga

Reguła CA1837 jest dostępna od wersji .NET 5.0.

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()
    {
        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

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 „Environment.ProcessId” zamiast „Process.GetCurrentProcess().Id” z listy dostępnych opcji.

Poprawka kodu dla CA1837 — użyj

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 usuwania wystąpienia Process.

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 CA1837
// The code that's violating the rule is on this line.
#pragma warning restore CA1837

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

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

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

Zobacz też