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 rompente
Abilitato per impostazione predefinita in .NET 10 Come suggerimento
Linguaggi applicabili C# e Visual Basic

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:

  • Allocca un'istanza Process e un'istanza ProcessModule, di solito solo per ottenere FileName.
  • L'istanza Process deve essere eliminata, con un impatto sulle prestazioni.
  • È facile dimenticare di chiamare Dispose() sull'istanza Process.
  • Se nient'altro oltre a FileName usa l'istanza Process, la dimensione collegata cresce inutilmente, aumentando il grafo 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 ignorare una violazione di questa regola se non si è interessati all'impatto sulle prestazioni derivante dall'allocazione non necessaria e dallo smaltimento finale delle istanze Process 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