CA1837: Använd Environment.ProcessId i stället för Process.GetCurrentProcess(). Id
Property | Värde |
---|---|
Regel-ID | CA1837 |
Title | Använd Environment.ProcessId i stället för Process.GetCurrentProcess(). Id |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Den här regeln letar upp anrop till och föreslår att System.Diagnostics.Process.GetCurrentProcess().Id
du använder System.Environment.ProcessId
i stället, eftersom den är mer effektiv.
Regelbeskrivning
System.Diagnostics.Process.GetCurrentProcess().Id
är dyrt:
- Den allokerar en Process instans, vanligtvis bara för att hämta
Id
. - Instansen Process måste tas bort, vilket har en prestandapåverkan.
- Det är lätt att glömma att anropa Dispose() instansen Process .
- Om inget annat än
Id
använder instansenProcess
växer den länkade storleken i onödan genom att öka grafen med typer som refereras till. - Det är något svårt att identifiera eller hitta det här API:et.
System.Environment.ProcessId
undviker alla ovanstående.
Kommentar
Regel CA1837 är tillgänglig från och med .NET 5.0.
Så här åtgärdar du överträdelser
Överträdelsen kan antingen åtgärdas manuellt eller i vissa fall med hjälp av snabbåtgärder för att åtgärda kod i Visual Studio.
Följande två kodfragment visar ett brott mot regeln och hur du åtgärdar den:
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
Dricks
En kodkorrigering är tillgänglig för den här regeln i Visual Studio. Om du vill använda den placerar du markören på överträdelsen och trycker på Ctrl+. (punkt). Välj Använd "Environment.ProcessId" i stället för "Process.GetCurrentProcess(). ID från listan över alternativ som visas.
När du ska ignorera varningar
Det är säkert att förhindra en överträdelse av den här regeln om du inte bryr dig om prestandapåverkan från onödig allokering och eventuell bortskaffande av en Process instans.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1837
// The code that's violating the rule is on this line.
#pragma warning restore CA1837
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1837.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.