Megosztás a következőn keresztül:


CA1837: A Environment.ProcessId használata a Process.GetCurrentProcess() helyett. Id

Tulajdonság Érték
Szabályazonosító CA1837
Cím A Process.GetCurrentProcess() helyett használja a Environment.ProcessId azonosítót. Id
Kategória Teljesítmény
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

Ez a szabály megkeresi a System.Diagnostics.Process.GetCurrentProcess().Id hívásokat, és inkább a használatát System.Environment.ProcessId javasolja, mert hatékonyabb.

Szabály leírása

System.Diagnostics.Process.GetCurrentProcess().Id költséges:

  • Lefoglal egy példányt Process , általában csak azért, hogy lekérje a Id.
  • A Process példányt el kell dobni, ami hatással van a teljesítményre.
  • Könnyű elfelejteni a példány meghívását Dispose()Process .
  • Ha semmi más nem használja a Process példánytId, akkor a hivatkozott típusok gráfjának növelésével szükségtelenül nő a csatolt méret.
  • Ezt az API-t kissé nehéz felderíteni vagy megtalálni.

System.Environment.ProcessId elkerüli a fentieket.

Megjegyzés:

A CA1837 szabály a .NET 5.0-tól érhető el.

Szabálysértések kijavítása

A szabálysértés manuálisan is kijavítható, vagy bizonyos esetekben a Gyorsműveletek segítségével kijavíthatja a kódot a Visual Studióban.

A következő két kódrészlet a szabály megsértését és a hiba elhárítását mutatja be:

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

Tipp.

Ehhez a szabályhoz kódjavítás érhető el a Visual Studióban. A használathoz helyezze a kurzort a szabálysértésre, és nyomja le a Ctrl+ billentyűt. (pont). Válassza a "Environment.ProcessId" lehetőséget a "Process.GetCurrentProcess() helyett. A megjelenő lehetőségek listájából származó azonosító.

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

Mikor kell letiltani a figyelmeztetéseket?

Nyugodtan el lehet tiltani a szabály megsértését, ha nem aggódik a példány szükségtelen lefoglalása és végleges elidegenítése Process által gyakorolt teljesítményhatás miatt.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Kapcsolódó információk