CA1837: используйте Environment.ProcessId вместо Process.GetCurrentProcess(). Id

Свойство Значение
Идентификатор правила CA1837
Заголовок Используйте Environment.ProcessId вместо Process.GetCurrentProcess().Id.
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Это правило находит вызовы к System.Diagnostics.Process.GetCurrentProcess().Id и предлагает использовать вместо него System.Environment.ProcessId, так как это более эффективно.

Описание правила

System.Diagnostics.Process.GetCurrentProcess().Id является ресурсоемким:

  • Он выделяет экземпляр Process, обычно только для получения Id.
  • Экземпляр Process должен быть удален, что повлияет на производительность.
  • Легко забыть о вызове Dispose() в экземпляре Process.
  • Если экземпляр Process используется только Id, то увеличение графа ссылаемых типов чрезмерно увеличивает размер.
  • Обнаружить или найти этот API довольно сложно.

System.Environment.ProcessId позволяет избежать этих проблем.

Примечание.

Правило CA1837 доступно с версии .NET 5.0.

Устранение нарушений

Нарушение можно устранить вручную. В некоторых случаях для исправления кода в Visual Studio можно использовать быстрые действия.

В следующих двух фрагментах кода показано нарушение правила и способы его устранения:

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

Совет

Для этого правила в Visual Studio доступно исправление кода. Чтобы использовать его, поместите курсор на нарушение и нажмите клавиши CTRL+ (период). Выберите Использовать Environment.ProcessId вместо Process.GetCurrentProcess().Id в списке.

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

Когда лучше отключить предупреждения

Можно отключить вывод предупреждений для этого правила, если вас не беспокоит влияние ненужных выделений и итоговое удаление экземпляра Process.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

См. также