Share via


CA1837: Místo Process.GetCurrentProcess() použijte Environment.ProcessId. Id

Vlastnost Hodnota
ID pravidla CA1837
Název Namísto Process.GetCurrentProcess().Id použijte Environment.ProcessId
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Toto pravidlo vyhledá volání System.Diagnostics.Process.GetCurrentProcess().Id a navrhne místo toho použití System.Environment.ProcessId , protože je efektivnější.

Popis pravidla

System.Diagnostics.Process.GetCurrentProcess().Id je nákladná:

  • Přiděluje Process instanci, obvykle jen k získání Id.
  • Instance Process musí být uvolněna, což má dopad na výkon.
  • Volání instance Process je snadnéDispose().
  • Pokud kromě instance nepoužívá Process nic jinéhoId, pak propojená velikost zbytečně roste zvýšením grafu typů odkazovaných na.
  • Toto rozhraní API je poněkud obtížné zjistit nebo najít.

System.Environment.ProcessId se vyhne všem výše uvedeným.

Poznámka:

Pravidlo CA1837 je k dispozici od .NET 5.0.

Jak opravit porušení

Porušení může být buď opraveno ručně, nebo v některých případech pomocí rychlých akcí opravit kód v sadě Visual Studio.

Následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:

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

Tip

Oprava kódu je k dispozici pro toto pravidlo v sadě Visual Studio. Pokud ho chcete použít, umístěte kurzor na porušení a stiskněte ctrl+. (tečka). Místo Process.GetCurrentProcess() zvolte Použít Environment.ProcessId. ID ze seznamu zobrazených možností

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

Kdy potlačit upozornění

Je bezpečné potlačit porušení tohoto pravidla, pokud si nejste jisti dopadem na výkon při zbytečném přidělení a případném odstranění Process instance.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také