CA1837: Użyj właściwości Environment.ProcessId zamiast Process.GetCurrentProcess(). Identyfikator

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

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:

  • Process Przydziela ono wystąpienie, zwykle tylko w celu pobrania elementu Id.
  • 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ż Id 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.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

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 elementu "Environment.ProcessId" zamiast polecenia "Process.GetCurrentProcess(). Identyfikator z listy przedstawionych opcji.

Code fix for CA1837 - Use 'Environment.ProcessId' instead of 'Process.GetCurrentProcess().Id'

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ąpienia.

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ż