CA1837: Gebruik Environment.ProcessId in plaats van Process.GetCurrentProcess().Id

Eigenschap Waarde
Regel-id CA1837
Titel Gebruik Environment.ProcessId in plaats van Process.GetCurrentProcess().Id
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Met deze regel worden aanroepen naar System.Diagnostics.Process.GetCurrentProcess().Id opgespoord en wordt het gebruik van System.Environment.ProcessId in plaats daarvan voorgesteld, omdat dit efficiënter is.

Beschrijving van regel

System.Diagnostics.Process.GetCurrentProcess().Id is duur:

  • Een Process instantie wordt toegewezen, meestal alleen om de Id te krijgen.
  • Het Process exemplaar moet worden verwijderd, wat invloed heeft op de prestaties.
  • Het is gemakkelijk om te vergeten Dispose() aan te roepen op de Process instantie.
  • Als niets anders dan Id de Process-instantie gebruikt, dan groeit de gekoppelde grootte onnodig door de grafeen van verwezen typen 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.

Hoe schendingen op te lossen

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. Om het te gebruiken, plaatst u de cursor op de overtreding en drukt u op Ctrl+. (punt). Kies Gebruik 'Omgeving.ProcessId' in plaats van 'Process.GetCurrentProcess().Id' uit de lijst met opties die worden weergegeven.

Codefix voor CA1837 - Gebruik Environment.ProcessId in plaats van Process.GetCurrentProcess(). Id'

Wanneer waarschuwingen onderdrukken

Het is prima 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 opruiming 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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.

Zie ook