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’instanceProcess
, 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.
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.