Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1839 |
| Název | Místo Process.GetCurrentProcess() použijte Environment.ProcessPath. MainModule.FileName |
| Kategorie | Výkon |
| Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
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. - Instance Process musí být uvolněna, což má dopad na výkon.
- Volání instance Dispose() je snadnéProcess.
- Pokud kromě instance nepoužívá
FileNamenic jinéhoProcess, pak propojená velikost zbytečně roste zvýšením grafu typů odkazovaných na. - 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 porušení a stiskněte ctrl+. (tečka). V seznamu zobrazených možností zvolte Use '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í Process instancí.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.