Share via


CA1839: Environment.ProcessPath gebruiken in plaats van Process.GetCurrentProcess(). MainModule.FileName

Eigenschappen Weergegeven als
Regel-id CA1839
Titel Gebruik Environment.ProcessPath in plaats van Process.GetCurrentProcess(). MainModule.FileName
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Hiermee Process.GetCurrentProcess().MainModule.FileName haalt u het pad naar het bestand op dat het proces heeft gestart in plaats van Environment.ProcessPath.

Beschrijving van regel

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName is duur:

  • Het wijst een Process en ProcessModule instantie toe, meestal alleen om de FileName.
  • 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 FileName het Process 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.ProcessPath vermijdt al deze nadelen en produceert dezelfde informatie.

Notitie

System.Environment.ProcessPath is beschikbaar vanaf .NET 6.

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()
    {
        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

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.ProcessPath gebruiken in de lijst met opties die worden weergegeven.

Code fix for CA1839 - Use 'Environment.ProcessPath'

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 de Process en ProcessModule instanties.

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 CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839

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

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Zie ook