CA1839: usare Environment.ProcessPath anziché Process.GetCurrentProcess(). MainModule.FileName
Proprietà | valore |
---|---|
ID regola | CA1839 |
Title | Usare Environment.ProcessPath anziché Process.GetCurrentProcess(). MainModule.FileName |
Categoria | Prestazioni |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come suggerimento |
Causa
Uso di Process.GetCurrentProcess().MainModule.FileName
per ottenere il percorso del file che ha avviato il processo anziché Environment.ProcessPath.
Descrizione regola
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
è costoso:
- Alloca un'istanza Process eProcessModule, in genere, solo per ottenere .
FileName
- L'istanza Process deve essere eliminata, con un impatto sulle prestazioni.
- È facile dimenticare di chiamare Dispose() l'istanza Process .
- Se non altro oltre
FileName
a usare l'istanzaProcess
, le dimensioni collegate aumentano inutilmente aumentando il grafico dei tipi a cui si fa riferimento. - È un po' difficile individuare o trovare questa API.
System.Environment.ProcessPath
evita tutti questi svantaggi e produce le stesse informazioni.
Nota
System.Environment.ProcessPath è disponibile a partire da .NET 6.
Come correggere le violazioni
La violazione può essere corretta manualmente o, in alcuni casi, usando Azioni rapide per correggere il codice in Visual Studio.
I due frammenti di codice seguenti mostrano una violazione della regola e come risolverli:
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
Suggerimento
Una correzione del codice è disponibile per questa regola in Visual Studio. Per usarlo, posizionare il cursore sulla violazione e premere CTRL+. (punto). Scegliere Usa 'Environment.ProcessPath' dall'elenco delle opzioni presentate.
Quando eliminare gli avvisi
È possibile eliminare una violazione di questa regola se non si è interessati all'impatto sulle prestazioni dall'allocazione non necessaria e dall'eliminazione finale delle Process istanze e ProcessModule .
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1839.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.