CA1837: Environment.ProcessId gebruiken in plaats van Process.GetCurrentProcess(). Legitimatiebewijs
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1837 |
Titel | Gebruik Environment.ProcessId in plaats van Process.GetCurrentProcess(). Legitimatiebewijs |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Met deze regel worden aanroepen naar aanroepen gevonden System.Diagnostics.Process.GetCurrentProcess().Id
en voorgesteld om in plaats daarvan te gebruiken System.Environment.ProcessId
, omdat deze efficiënter is.
Beschrijving van regel
System.Diagnostics.Process.GetCurrentProcess().Id
is duur:
- Er wordt een Process instantie toegewezen, meestal alleen om de
Id
. - Het Process exemplaar moet worden verwijderd, wat invloed heeft op de prestaties.
- Het is gemakkelijk om te vergeten het exemplaar aan te roepen Dispose() Process .
- Als er verder niets anders dan
Id
hetProcess
exemplaar wordt gebruikt, neemt de gekoppelde grootte onnodig toe door de grafiek van de typen waarnaar wordt verwezen te vergroten. - Het is enigszins moeilijk om deze API te detecteren of te vinden.
System.Environment.ProcessId
vermijdt het bovenstaande.
Notitie
Regel CA1837 is beschikbaar vanaf .NET 5.0.
Schendingen oplossen
De schending kan handmatig worden opgelost, of in sommige gevallen met snelle acties om code in Visual Studio op te lossen.
In de volgende twee codefragmenten ziet u een schending van de regel en hoe u deze kunt oplossen:
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
Er is een codeoplossing beschikbaar voor deze regel in Visual Studio. Als u deze wilt gebruiken, plaatst u de cursor op de schending en drukt u op Ctrl+. (punt). Kies Omgeving.ProcessId gebruiken in plaats van Process.GetCurrentProcess(). Id' uit de lijst met opties die worden weergegeven.
Wanneer waarschuwingen onderdrukken
Het is veilig om een schending van deze regel te onderdrukken als u zich geen zorgen maakt over de gevolgen voor de prestaties van onnodige toewijzing en uiteindelijke verwijdering van een Process exemplaar.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1837
// The code that's violating the rule is on this line.
#pragma warning restore CA1837
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1837.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.