Condividi tramite


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
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 10 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'istanza Process , 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.

Correzione del codice per CA1839 - Usare 'Environment.ProcessPath'

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.

Vedi anche