CA1839: Použijte Environment.ProcessPath namísto Process.GetCurrentProcess().MainModule.FileName.

Vlastnost Hodnota
ID pravidla CA1839
Název Místo Process.GetCurrentProcess().MainModule.FileName použijte Environment.ProcessPath.
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Používá se Process.GetCurrentProcess().MainModule.FileName k získání cesty k souboru, který spustil proces místo Environment.ProcessPath.

Popis pravidla

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName je nákladná:

  • Přiděluje instanci Process a ProcessModule obvykle jen k získání FileName.
  • Process instance musí být odstraněna z paměti, což má dopad na výkon.
  • Je snadné zapomenout zavolat Dispose() na instanci Process.
  • Pokud kromě FileName nic jiného nepoužívá instanci Process, pak zbytečně roste velikost odkazované struktury typů, což navyšuje celý graf typů.
  • Toto rozhraní API je poněkud obtížné zjistit nebo najít.

System.Environment.ProcessPath zabraňuje všem těmto nevýhodám a vytváří stejné informace.

Poznámka:

System.Environment.ProcessPath je k dispozici od verze .NET 6.

Jak opravit porušení

Porušení může být buď opraveno ručně, nebo v některých případech pomocí rychlých akcí opravit kód v sadě Visual Studio.

Následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:

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

Oprava kódu je k dispozici pro toto pravidlo v sadě Visual Studio. Pokud ho chcete použít, umístěte kurzor na chybu a stiskněte Ctrl. (tečka). V seznamu zobrazených možností zvolte Use 'Environment.ProcessPath' .

Oprava kódu pro CA1839 – použití environment.ProcessPath

Kdy potlačit upozornění

Je bezpečné potlačit porušení tohoto pravidla, pokud vás nezajímá dopad na výkon při zbytečném přidělování a případném vyřazení instancí Process a ProcessModule.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také