Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vanaf .NET 11 weigeren multidimensionale Tensor-kopieerbewerkingen en bewerkingen die een doelbuffer accepteren niet-ondersteunde overlappende opslagindelingen met ArgumentException voordat ze uitvoer schrijven. Tensor-span-constructors valideren ook het elementtype van System.Array-opslag.
De wijziging wordt geleverd in het pakket System.Numerics.Tensors , inclusief de ondersteunde doelframeworks. Het bijwerken van het pakket kan van invloed zijn op apps die zijn gericht op eerdere .NET versies. De afzonderlijke TensorPrimitives API's behouden hun bestaande overlapcontract.
Geïntroduceerde versie
.NET 11
Vorig gedrag
CopyTo, FlattenTo, TryCopyTo en TryFlattenTo documenteerden ondersteuning voor overlappende bron- en doelopslag. De beschreven Try methoden behandelen de bron alsof deze eerst naar tijdelijke opslag was gekopieerd.
De volgende bron en bestemming verwijzen bijvoorbeeld naar overlappende regio's van dezelfde array:
int[] storage = { 1, 2, 3, 4, 5, 6 };
ReadOnlyTensorSpan<int> source = new(storage, new nint[] { 2, 2 }, new nint[] { 3, 1 });
TensorSpan<int> destination = new(storage, new nint[] { 2, 2 });
source.CopyTo(destination);
Het gedocumenteerde contract in snapshotstijl impliceerde dat het doel [1, 2, 4, 5] zou ontvangen. Werkelijke resultaten voor niet-ondersteunde overlapping kunnen afhankelijk zijn van de indeling en doorkruisingsvolgorde; de implementatie voldeed niet betrouwbaar aan dat contract.
Constructors die System.Array ontvingen, valideerden niet consequent of het elementtype van de array compatibel was met T.
Nieuw gedrag
Het voorbeeld genereert ArgumentException voordat u kopieert. Dezelfde niet-ondersteunde overlap treedt ook op bij TryCopyTo en TryFlattenTo wanneer hun vorm- en capaciteitscontroles slagen.
Ondersteunde overlapping blijft operatiespecifiek:
| Bewerking | Ondersteunde overlap |
|---|---|
CopyTo en TryCopyTo |
Dichte bron en bestemming met een gelijk aantal elementen of exact identieke weergaven. |
FlattenTo en TryFlattenTo |
Een samengestelde bron en het doelbereik. |
| Elementgewijze bewerkingen met bestemming | Identieke invoer-/uitvoerweergaven zonder herhaalde logische opslaglocaties. Verschoven overlap en overlappende broadcast-invoer worden geweigerd. |
Tensor.ResizeTo |
Drukke bron en bestemming. Niet-ondersteunde gestriede overlap wordt afgewezen. |
| Omkering in dezelfde weergave | Dense in-place omkering, of een no-op-omkering. |
De Try kopieermethoden retourneren falsenog steeds, zonder te kopiëren, wanneer de bestemming te kort is.
TryCopyTo geeft ook false terug voor niet-compatibele shapes. Niet-ondersteunde overlap is een ongeldige indeling, geen capaciteitsfout.
Tensor.ResizeTo en samenvoeging naar een bestaande bestemming wijzen een nul-stapdimensie af die meer dan één logisch element bevat. Lege bestemmingen en nul stappen in singleton-dimensies blijven toegestaan.
TensorSpan<T> en ReadOnlyTensorSpan<T> constructors die System.Array accepteren, genereren ArrayTypeMismatchException voor incompatibele typen matrixelementen. Schrijfbare tensor-spans wijzen ook covariante arrays af; alleen-lezen tensor-spans maken compatibele covariantie van referentietypen mogelijk.
Type van brekende verandering
Dit is een gedragsverandering.
Reden voor wijziging
Correcte kopieën tussen willekeurig overlappende gestridede tensors kunnen tijdelijke opslag vereisen die evenredig is met de gehele tensor. Expliciete afwijzing voorkomt traversal-afhankelijke beschadiging zonder op de achtergrond volledige tensor-momentopnamen toe te wijzen.
Herhaalde uitvoeropslaglocaties kunnen geen afzonderlijke logische resultaten vertegenwoordigen. Validatie van matrixelementtype voorkomt dat incompatibele opslag wordt geïnterpreteerd als Ten voorkomt schrijfbewerkingen via covariant-matrixopslag.
Aanbevolen actie
Gebruik niet-overlappende uitvoeropslag of maak expliciet een momentopname van de bron vóór een overlappende kopie. Voor het voorgaande voorbeeld:
int[] snapshot = new int[checked((int)source.FlattenedLength)];
source.FlattenTo(snapshot);
ReadOnlyTensorSpan<int> independentSource = new(snapshot, source.Lengths);
independentSource.CopyTo(destination);
De momentopname bevat [1, 2, 4, 5]. Maak een momentopname van elke overlappende invoer of wijs een afzonderlijk resultaat toe voor elementgewijze bewerkingen met een doelargument. Vervang broadcast-bestemmingen door onafhankelijk adresseerbare uitvoeropslag.
Voor een tensor-span over System.Array, lever compatibele elementopslag. Voor een beschrijfbare weergave gebruikt u een array die niet covariant is, of kopieert u de elementen naar een nieuwe T[].
Ga er niet van uit dat een Try kopieermethode geen uitzondering kan genereren. Een false resultaat verwerkt onvoldoende capaciteit of, voor TryCopyTo, incompatibele shapes. Geen compatibiliteitsswitch herstelt willekeurig overlappend gedrag.
Betreffende API's
- System.Numerics.Tensors.IReadOnlyTensor<TSelf,T>.CopyTo.
- System.Numerics.Tensors.IReadOnlyTensor<TSelf,T>.FlattenTo.
- System.Numerics.Tensors.IReadOnlyTensor<TSelf,T>.TryCopyTo.
- System.Numerics.Tensors.IReadOnlyTensor<TSelf,T>.TryFlattenTo.
- De bijbehorende kopieer- en afvlakkende methoden op Tensor<T>, TensorSpan<T>en ReadOnlyTensorSpan<T>.
- Elementgewijze methoden op Tensor met een bestemmingsargument, waaronder unaire, binaire en tensor-/scalaire bewerkingen.
- System.Numerics.Tensors.Tensor.ResizeTo (alle overloads).
- System.Numerics.Tensors.Tensor.Reverse en System.Numerics.Tensors.Tensor.ReverseDimension (overbelastingen die een bestemming als parameter nemen).
- System.Numerics.Tensors.Tensor.Concatenate (overload met een bestemming als parameter).
-
TensorSpan<T> en ReadOnlyTensorSpan<T> (de twee overloads van elk type die
System.Arrayaccepteren).