CA1839 : utilisez Environment.ProcessPath au lieu de Process.GetCurrentProcess().MainModule.FileName
Propriété | Value |
---|---|
Identificateur de la règle | CA1839 |
Titre | Utiliser Environment.ProcessPath à la place de Process.GetCurrentProcess().MainModule.FileName |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Comme suggestion |
Cause
Utilisez Process.GetCurrentProcess().MainModule.FileName
pour obtenir le chemin d’accès au fichier qui a lancé le processus au lieu de Environment.ProcessPath.
Description de la règle
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
est coûteux :
- Elle alloue une instance Process et ProcessModule, en général simplement pour obtenir
FileName
. - L’instance Process doit être éliminée, ce qui affecte les performances.
- Il est facile d’oublier d’appeler Dispose() sur l’instance Process.
- Si
FileName
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.ProcessPath
évite tous ces inconvénients et produit les mêmes informations.
Notes
System.Environment.ProcessPath est disponible à partir de .NET 6.
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()
{
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
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 Utiliser « Environment.ProcessPath » dans la liste des options présentées.
Quand supprimer les avertissements
Vous pouvez supprimer une violation de cette règle en toute sécurité si vous ne vous souciez pas de l’impact sur les performances lié à l’allocation inutile et à la suppression ultérieure des instances Process et ProcessModule.
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 CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839
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.CA1839.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.