Бөлісу құралы:


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

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

Причина

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

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

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

  • Он выделяет экземпляр Process, обычно только для получения Id.
  • Экземпляр Process должен быть удалён, что оказывает влияние на производительность.
  • Легко забыть о вызове Dispose() для экземпляра Process.
  • Если ничего, кроме Id, не использует экземпляр Process, то излишнее увеличение размера происходит за счёт увеличения графа ссылаемых типов.
  • Обнаружить или найти этот 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 из представленного списка.

Исправление для правила CA1837 — используйте Environment.ProcessId вместо 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

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

См. также