Aracılığıyla paylaş


CA1837: Process.GetCurrentProcess() yerine Environment.ProcessId kullanın. Kimliği

Özellik Değer
Kural Kimliği CA1837
Başlık Process.GetCurrentProcess().Id yerine Environment.ProcessId kullanın
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 9'da varsayılan olarak etkin Öneri olarak

Neden

Bu kural çağrıları System.Diagnostics.Process.GetCurrentProcess().Id bulur ve daha verimli olduğundan bunun yerine kullanmayı System.Environment.ProcessId önerir.

Kural açıklaması

System.Diagnostics.Process.GetCurrentProcess().Id pahalıdır:

  • Genellikle yalnızca almak Idiçin bir Process örnek ayırır.
  • Örneğin Process atılması gerekir ve bu da performansı etkiler.
  • Örnekte aramayı Dispose() Process unutmak kolaydır.
  • Örneği başka hiçbir şey Id kullanmıyorsa Process , başvuruda bulunılan türlerin grafiğini artırarak bağlantılı boyut gereksiz yere büyür.
  • Bu API'yi bulmak veya bulmak biraz zordur.

System.Environment.ProcessId yukarıdakilerin tümünü önler.

Not

KURAL CA1837 .NET 5.0'dan itibaren kullanılabilir.

İhlalleri düzeltme

İhlal el ile düzeltilebilir veya bazı durumlarda Visual Studio'da kodu düzeltmek için Hızlı Eylemler kullanılabilir.

Aşağıdaki iki kod parçacığı kuralın ihlalini ve nasıl düzeltileceğini gösterir:

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

İpucu

Visual Studio'da bu kural için bir kod düzeltmesi kullanılabilir. Bunu kullanmak için imleci ihlalin üzerine getirin ve Ctrl+ tuşuna (nokta) basın. 'Process.GetCurrentProcess() yerine 'Environment.ProcessId' kullan'ı seçin . Sunulan seçenekler listesinden Kimlik' öğesini seçin.

CA1837 için kod düzeltmesi - 'Process.GetCurrentProcess() yerine 'Environment.ProcessId' kullanın. Kimlik'

Uyarıların ne zaman bastırılması gerekiyor?

Gereksiz ayırma ve bir örneğin nihai elden çıkarılmasından kaynaklanan performans etkisiyle ilgilenmiyorsanız, bu kuralın ihlalini gizlemeniz güvenlidir Process .

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none olarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Ayrıca bkz.