CA1839. Использование Environment.ProcessPath вместо Process.GetCurrentProcess().MainModule.FileName
Свойство | Значение |
---|---|
Идентификатор правила | CA1839 |
Заголовок | Используйте Environment.ProcessPath вместо Process.GetCurrentProcess(). MainModule.FileName |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Использование Process.GetCurrentProcess().MainModule.FileName
для получения пути к файлу, который запустил процесс, вместо Environment.ProcessPath.
Описание правила
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
является ресурсоемким:
- Экземпляр Process и ProcessModule обычно выделяется только для получения
FileName
. - Экземпляр Process должен быть удален, что повлияет на производительность.
- Легко забыть о вызове Dispose() в экземпляре Process.
- Если экземпляр
Process
используется толькоFileName
, то увеличение графа ссылаемых типов чрезмерно увеличивает размер. - Обнаружить или найти этот API довольно сложно.
System.Environment.ProcessPath
позволяет избежать всех этих недостатков и предоставляет ту же информацию.
Примечание.
System.Environment.ProcessPath предоставляется, начиная с версии .NET 6.
Устранение нарушений
Нарушение можно устранить вручную. В некоторых случаях для исправления кода в Visual Studio можно использовать быстрые действия.
В следующих двух фрагментах кода показано нарушение правила и способы его устранения:
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
Совет
Для этого правила в Visual Studio доступно исправление кода. Чтобы использовать его, поместите курсор на нарушение и нажмите клавиши CTRL+ (период). Выберите Использовать Environment.ProcessPath в списке представленных вариантов.
Когда лучше отключить предупреждения
Можно безопасно подавить информирование о нарушении этого правила, если вас не беспокоит влияние на производительность ненужного выделения и возможного удаления экземпляров Process и ProcessModule.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1839.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.