Aracılığıyla paylaş


CA1844: 'Stream' alt sınıfına alırken zaman uyumsuz yöntemlerin bellek tabanlı geçersiz kılmalarını sağlayın

Özellik Değer
Kural Kimliği CA1844
Başlık 'Stream' alt sınıfını oluştururken zaman uyumsuz yöntemlerin bellek tabanlı geçersiz kılmalarını sağlayın
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 9'da varsayılan olarak etkin Öneri olarak

Neden

Geçersiz kılmalardan Stream türetilen ancak geçersiz ReadAsync(Byte[], Int32, Int32, CancellationToken) kılmayan ReadAsync(Memory<Byte>, CancellationToken)bir tür. Veya geçersiz kılmalardan Stream WriteAsync(Byte[], Int32, Int32, CancellationToken) türetilen ancak geçersiz kılmayan WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)bir tür.

Kural açıklaması

Bellek tabanlı ReadAsync ve WriteAsync yöntemler, performansı geliştirmek için eklenmiştir ve bunu birden çok yolla gerçekleştirirler:

  • Sırasıyla ve ValueTask<int> yerine Task ve Task<int>döndürürlerValueTask.
  • Diziye ek bir kopya gerçekleştirmek zorunda kalmadan herhangi bir arabellek türünün geçirilmesine izin verir.

Bu performans avantajlarını gerçekleştirmek için, türetilen Stream türlerin kendi bellek tabanlı uygulamalarını sağlaması gerekir. Aksi takdirde, varsayılan uygulama dizi tabanlı uygulamayı çağırmak için belleği bir diziye kopyalamaya zorlanır ve bu da performansın düşmesine neden olur. Çağıran, bir dizi tarafından desteklenmeyen bir Memory<T> veya ReadOnlyMemory<T> örneğini geçtiğinde performans daha fazla etkilenir.

İhlalleri düzeltme

İhlalleri düzeltmenin en kolay yolu, dizi tabanlı uygulamanızı bellek tabanlı bir uygulama olarak yeniden yazmak ve ardından dizi tabanlı yöntemleri bellek tabanlı yöntemler açısından uygulamaktır.

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

Aşağıdaki durumlardan herhangi biri geçerliyse, bu kuraldan gelen bir uyarıyı engellemek güvenlidir:

  • Performans isabeti önemli değildir.
  • Alt sınıfınızın Stream yalnızca dizi tabanlı yöntemleri kullanacağını biliyorsunuz.
  • Alt sınıfınızda Stream bellek tabanlı arabellekleri desteklemeyen bağımlılıklar var.

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 CA1844
// The code that's violating the rule is on this line.
#pragma warning restore CA1844

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.CA1844.severity = none

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

Ayrıca bkz.