CA1844: Poskytnutí přepisů asynchronních metod založených na paměti při podtřídě Stream
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1844 |
Název | Poskytnutí přepisů asynchronních metod založených na paměti při podtřídě Stream |
Kategorie | Výkon |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Typ odvozený z Stream přepsání ReadAsync(Byte[], Int32, Int32, CancellationToken) , ale nepřepíše ReadAsync(Memory<Byte>, CancellationToken). Nebo typ odvozený z Stream přepsání WriteAsync(Byte[], Int32, Int32, CancellationToken) , ale nepřepíše WriteAsync(ReadOnlyMemory<Byte>, CancellationToken).
Popis pravidla
Byly přidány metody založené na ReadAsync
WriteAsync
paměti, aby se zlepšil výkon, který se dosahuje několika způsoby:
ValueTask
Vrátí místoValueTask<int>
Task
a místo aTask<int>
v uvedeném pořadí.- Umožňují předání libovolného typu vyrovnávací paměti, aniž by musely provádět další kopii do pole.
Aby bylo možné tyto výhody výkonu realizovat, musí typy odvozené z Stream nich poskytovat vlastní implementaci založenou na paměti. Jinak bude výchozí implementace nucena zkopírovat paměť do pole, aby volala implementaci založenou na poli, což vede ke snížení výkonu. Když volající předá v Memory<T> instanci nebo ReadOnlyMemory<T> instanci, která není maticí, bude mít vliv na výkon více.
Jak opravit porušení
Nejjednodušší způsob, jak opravit porušení, je přepsat implementaci založenou na poli jako implementaci založenou na paměti a pak implementovat metody založené na polích z hlediska metod založených na paměti.
Kdy potlačit upozornění
Pokud platí některá z následujících situací, je bezpečné potlačit upozornění z tohoto pravidla:
- Dosažení výkonu není problém.
- Víte, že vaše
Stream
podtřída bude používat pouze metody založené na polích. - Vaše
Stream
podtřída obsahuje závislosti, které nepodporují vyrovnávací paměti.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1844
// The code that's violating the rule is on this line.
#pragma warning restore CA1844
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1844.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.