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


CA1839: A Environment.ProcessPath használata a Process.GetCurrentProcess() helyett. MainModule.FileName

Tulajdonság Érték
Szabályazonosító CA1839
Cím A Process.GetCurrentProcess() helyett használja a Environment.ProcessPath parancsot. MainModule.FileName
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

A folyamatot kezdeményező fájl elérési útjának lekérésére Environment.ProcessPathhasználhatóProcess.GetCurrentProcess().MainModule.FileName.

Szabály leírása

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

  • Lefoglal egy és ProcessModule egy Process példányt, általában csak azért, hogy lekérje a FileName.
  • 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ánytFileName, 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.ProcessPath elkerüli ezeket a hátrányokat, és ugyanazokat az információkat állítja elő.

Megjegyzés:

System.Environment.ProcessPath a .NET 6-tól kezdve é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()
    {
        string path = Process.GetCurrentProcess().MainModule.FileName; // Violation occurs
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = Process.GetCurrentProcess().MainModule.FileName ' Violation occurs.
    End Function
End Class
using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        string path = System.Environment.ProcessPath; // Violation fixed
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = System.Environment.ProcessPath ' Violation fixed.
    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). A megjelenő lehetőségek listájában válassza a "Environment.ProcessPath" lehetőséget.

Code fix for CA1839 - Use 'Environment.ProcessPath'

Mikor kell letiltani a figyelmeztetéseket?

Nyugodtan el lehet tiltani a szabály megsértését, ha nem aggódik a szükségtelen kiosztás és a ProcessProcessModule példányok végleges elidegenítése á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 CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839

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.CA1839.severity = none

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

Kapcsolódó információk