Sprzętowe testy wewnętrzne IsSupported mogą się różnić w przypadku typów zagnieżdżonych
Sprawdzanie <Isa>.X64.IsSupported
, gdzie <Isa>
odwołuje się do klas w System.Runtime.Intrinsics.X86 przestrzeni nazw, może teraz wygenerować inny wynik do poprzednich wersji platformy .NET.
Napiwek
ISA oznacza architekturę standardową w branży.
Wprowadzona wersja
5,0
Opis zmiany
W poprzednich wersjach platformy .NET niektóre typy System.Runtime.Intrinsics.X86 wewnętrzne sprzętu, na przykład , System.Runtime.Intrinsics.X86.Aesnie uwidoczniły zagnieżdżonej X64
klasy. W przypadku tych typów wywoływanie <Isa>.X64.IsSupported
rozpoznawane jako IsSupported
właściwość w zagnieżdżonej X64
klasie nadrzędnej klasy <Isa>
. Oznaczało to, że właściwość może zwrócić true
nawet wtedy, gdy <Isa>.IsSupported
zwraca wartość false
.
W wersjach .NET 5 i nowszych System.Runtime.Intrinsics.X86 wszystkie typy uwidaczniają klasę zagnieżdżoną X64
, która odpowiednio raportuje obsługę. Gwarantuje to, że ogólna hierarchia pozostaje poprawna, a jeśli <Isa>.X64.IsSupported
jest true
to , <Isa>.IsSupported
można również przyjąć wartość true
.
Przyczyna wprowadzenia zmiany
To było zamierzone, że jeśli <Isa>.X64.IsSupported
jest true
, <Isa>.IsSupported
jest również implikowane jako true
. Jednak ze względu na sposób działania rozpoznawania składowych w języku C#, klasy, które nie miały klasy zagnieżdżonej X64
, uwidoczniły sytuację, w której nie zawsze miało to miejsce i doprowadziły do błędów w kodzie użytkownika.
Zalecana akcja
W razie potrzeby dostosuj kod sprawdzający IsSupported
, aby sprawdzić, czy jest odpowiednia usługa ISA.
Dotyczy interfejsów API
- System.Runtime.Intrinsics.X86.Aes.X64.IsSupported
- System.Runtime.Intrinsics.X86.Avx.X64.IsSupported
- System.Runtime.Intrinsics.X86.Avx2.X64.IsSupported
- System.Runtime.Intrinsics.X86.Fma.X64.IsSupported
- System.Runtime.Intrinsics.X86.Pclmulqdq.X64.IsSupported
- System.Runtime.Intrinsics.X86.Sse3.X64.IsSupported
- System.Runtime.Intrinsics.X86.Ssse3.X64.IsSupported