Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1837 |
| Title | Usare Environment.ProcessId invece di Process.GetCurrentProcess().Id |
| 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
Questa regola individua le chiamate a System.Diagnostics.Process.GetCurrentProcess().Id e suggerisce l'uso di System.Environment.ProcessId, perché è più efficiente.
Descrizione regola
System.Diagnostics.Process.GetCurrentProcess().Id è costoso:
- Alloca un'istanza Process, in genere solo per ottenere
Id. - L'istanza Process deve essere eliminata, con un impatto sulle prestazioni.
- È facile dimenticare di chiamare Dispose() sull'istanza Process.
- Se nient'altro oltre a
Idusa l'istanzaProcess, 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.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.
Quando eliminare gli avvisi
È possibile sopprimere una violazione di questa regola se non ci si preoccupa dell'impatto sulle prestazioni derivante 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.