CA1837: usare Environment.ProcessId anziché Process.GetCurrentProcess(). Id

Proprietà valore
ID regola CA1837
Title Usare Environment.ProcessId invece di Process.GetCurrentProcess().Id
Categoria Prestazioni
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

Questa regola individua le chiamate a System.Diagnostics.Process.GetCurrentProcess().Id e suggerisce l'uso System.Environment.ProcessId , perché è più efficiente.

Descrizione regola

System.Diagnostics.Process.GetCurrentProcess().Id è costoso:

  • Alloca un'istanza Process di , in genere solo per ottenere .Id
  • L'istanza Process deve essere eliminata, con un impatto sulle prestazioni.
  • È facile dimenticare di chiamare Dispose() l'istanza Process .
  • Se non altro oltre Id 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.ProcessId evita tutte le operazioni precedenti.

Nota

La regola CA1837 è disponibile a partire da .NET 5.0.

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()
    {
        int pid = Process.GetCurrentProcess().Id;
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim pid As Integer = Process.GetCurrentProcess().Id
    End Function
End Class
using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        int pid = System.Environment.ProcessId;
    }
}
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim pid As Integer = System.Environment.ProcessId
    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.ProcessId' invece di 'Process.GetCurrentProcess(). ID' dall'elenco delle opzioni presentate.

Code fix for CA1837 - Use 'Environment.ProcessId' instead of 'Process.GetCurrentProcess().Id'

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 di un'istanza Process .

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 CA1837
// The code that's violating the rule is on this line.
#pragma warning restore CA1837

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.CA1837.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedi anche