CA1837 : Utiliser Environment.ProcessId à la place de Process.GetCurrentProcess().Id

Propriété Value
Identificateur de la règle CA1837
Titre Utiliser Environment.ProcessId à la place de Process.GetCurrentProcess().Id
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme suggestion

Cause

Cette règle localise les appels à System.Diagnostics.Process.GetCurrentProcess().Id et suggère d’utiliser System.Environment.ProcessId à la place, car elle est plus efficace.

Description de la règle

System.Diagnostics.Process.GetCurrentProcess().Id est coûteuse :

  • Elle alloue une instance Process, en général simplement pour obtenir Id
  • L’instance Process doit être éliminée, ce qui a un impact sur les performances
  • Il est facile d’oublier d’appeler Dispose() sur l’instance Process.
  • Si Id uniquement utilise l’instance Process, la taille liée augmente inutilement en augmentant le graphe des types référencés.
  • Il est quelque peu difficile de découvrir ou de trouver cette API

System.Environment.ProcessId évite tout ce qui précède.

Notes

La règle CA1837 est disponible à partir de .NET 5.0.

Comment corriger les violations

La violation peut être corrigée soit manuellement, soit dans certains cas à l’aide d’actions rapides pour corriger le code dans Visual Studio.

Les deux extraits de code suivants montrent une violation de la règle et comment la corriger :

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

Conseil

Un correctif de code est disponible pour cette règle dans Visual Studio. Pour l’utiliser, positionnez le curseur sur la violation et appuyez sur Ctrl+. (point). Choisissez Utilisez 'Environment.ProcessId' au lieu de 'Process.GetCurrentProcess().Id' dans la liste des options présentées.

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

Quand supprimer les avertissements

Vous pouvez sans risque supprimer une violation de cette règle si vous n’êtes pas préoccupé par l’impact sur les performances de l’allocation inutile et de la suppression éventuelle d’une instance Process.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA1837
// The code that's violating the rule is on this line.
#pragma warning restore CA1837

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA1837.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Voir aussi