Hoppa till innehåll

Attribut för jobb, Burst och prestanda

↑
Referens för Unity 6

Burst och Job System kan öka prestandan genom att utföra kompatibelt arbete i optimerade jobb. Attributen beskriver också hur data får nås och när minne frigörs. Undantag från säkerhetskontroller kräver extra försiktighet.

Attribut Syfte Gäller för och kräver
[BurstCompile] Be Burst att kompilera kompatibla jobb eller metoder till optimerad native-kod. Job or method · Unity.Burst · Burst package
[BurstDiscard] Utelämna en kompatibel metodkropp från Burst-kompilering. Method · Unity.Burst · Burst package
[WriteOnly] Markera en native container i ett jobb som skrivbar men inte läsbar. Job field · Unity.Collections
[ReadOnly] Markera en native container i ett jobb som endast läsbar. Job field · Unity.Collections
[DeallocateOnJobCompletion] Frigör kompatibla native containers automatiskt när ett jobb avslutas. Job field · Unity.Collections
[NativeDisableParallelForRestriction] Stäng av en parallell skrivbegränsning för en native container. Job field · Unity.Collections
[NativeDisableUnsafePtrRestriction] Stäng av säkerhetsbegränsningar på en osäker pekare i ett jobb. Job field · Unity.Collections.LowLevel.Unsafe
[Preserve] Behåll en typ eller medlem som annars kan tas bort vid managed stripping. Type or member · UnityEngine.Scripting

Be Burst att kompilera kompatibla jobb eller metoder till optimerad native-kod.

Använd när: Optimera kompatibla numeriska jobb eller dataorienterade arbetslaster.

Tänk på: Burst är ett separat paket och stöder inte alla funktioner i hanterad C#.

Referens: Unity documentation

Utelämna en kompatibel metodkropp från Burst-kompilering.

Använd när: Separera en felsökningshjälp som inte ska köras i Burst-kod.

Tänk på: Anta inte att hanterad kod kan köras i ett Burst-jobb bara för att metoden är markerad.

Referens: Unity documentation

Markera en native container i ett jobb som skrivbar men inte läsbar.

Använd när: Markera en jobb-buffer som enbart skrivs till under körningen.

Tänk på: Påverkar jobbens säkerhetskontroller och gör inte annan kod trådsäker.

Referens: Unity documentation

Markera en native container i ett jobb som endast läsbar.

Använd när: Ge ett jobb åtkomst till en indatasamling utan skrivning.

Tänk på: Kan tillåta parallell läsning men ersätter inte korrekt hantering av livslängd.

Referens: Unity documentation

Frigör kompatibla native containers automatiskt när ett jobb avslutas.

Använd när: Knyt en kortlivad native-buffers ägarskap till jobbets livscykel.

Tänk på: Gäller endast kompatibla samlingar och allokeringsmönster. Använd inte samlingen efteråt.

Referens: Unity documentation

Stäng av en parallell skrivbegränsning för en native container.

Använd när: Stöd ett bevisat säkert eget indexeringsmönster som standardbegränsningen inte kan beskriva.

Tänk på: Du måste själv säkerställa att skrivningar inte krockar. Attributet tar bort en säkerhetskontroll.

Referens: Unity documentation

Stäng av säkerhetsbegränsningar på en osäker pekare i ett jobb.

Använd när: Integrera noga granskad osäker pekarkod i ett prestandakritiskt jobb.

Tänk på: Riskfylld genväg: pekarens livslängd och parallell åtkomst blir ditt ansvar.

Referens: Unity documentation

Behåll en typ eller medlem som annars kan tas bort vid managed stripping.

Använd när: Behåll kod som används via reflection eller indirekta referenser i ett spelbygge.

Tänk på: Användbart vid reflection och indirekt upptäckt kod. Verifiera faktiskt länkresultat.

Referens: Unity documentation

Unity C# | SumJob.cs
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
[BurstCompile]
public struct SumJob : IJob
{
[ReadOnly] public NativeArray<int> Input;
public NativeArray<int> Output;
public void Execute()
{
int sum = 0;
for (int i = 0; i < Input.Length; i++)
sum += Input[i];
Output[0] = sum;
}
}

Jobbet definierar hur data får användas. Koden som allokerar NativeArray och schemalägger jobbet måste fortfarande slutföra beroendet och frigöra minnet. Deklarationen sköter inte livslängden åt dig.