Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1837 |
| Název | Namísto Process.GetCurrentProcess().Id použijte Environment.ProcessId |
| Kategorie | Výkon |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
| Příslušné jazyky | C# a Visual Basic |
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 instanci Process, obvykle jen k získání
Id. - Process instance musí být odstraněna z paměti, což má dopad na výkon.
- Je snadné zapomenout zavolat Dispose() na instanci Process.
- Pokud kromě
Idnic jiného nepoužívá instanciProcess, pak zbytečně roste velikost odkazované struktury typů, což navyšuje celý graf typů. - 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 chybu a stiskněte
Kdy potlačit upozornění
Je bezpečné potlačit porušení tohoto pravidla, pokud nemáte obavy z dopadu na výkon z nežádoucího přidělování a následného 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.