Örnek sorular
Un Csharp Memory Gc PerformanceZorluk 1
Unity Profiler'ın CPU Usage modülünde, bir kare için "GC Alloc" sütunu neyi gösterir?
- aRuntime'ın ayırdığı toplam managed heap boyutunu.
- bScript kodunun o karede ayırdığı managed bellek miktarını.✓
- cUnity motorunun o karede ayırdığı native (C++) bellek miktarını.
- dUygulama başladığından beri çalışan garbage collection geçiş sayısını.
Açıklama:"GC Alloc", script kodunun o spesifik karede ne kadar managed bellek ayırdığını raporlar; Update içindeki kare-başı allocation'ları avlarken izlenmesi gereken sütun budur.
Un Csharp Memory Gc PerformanceZorluk 1
C#'ta bir struct değişkeni başka bir struct değişkenine atandığında ne olur?
- aTüm değer kopyalanır; ikisi birbirinden bağımsız olur.✓
- bİki değişken de heap üzerindeki aynı bellek konumuna referans eder hale gelir.
- cYeni değişkende yalnızca orijinal struct'a bir pointer saklanır.
- dAtama işlemi managed heap üzerinde otomatik olarak yeni bir nesne ayırır.
Açıklama:struct bir değer tipidir, dolayısıyla atama içeriğin tamamını kopyalar; kaynak ve hedef birbirinden bağımsızdır — aynı heap nesnesini paylaşan referans tiplerinin aksine.
Un Csharp Memory Gc PerformanceZorluk 1
Unity'nin Mono script backend'inde, C# script kodun ne zaman makine koduna derlenir?
- aHerhangi bir build oluşmadan önce, Unity Editor'ın asset import adımı sırasında tamamen.
- bHiçbir zaman — Mono, C# bytecode'unu her çağrıda satır satır yorumlar.
- cRuntime'da, derlenmiş IL cihazda çalıştırılırken, just-in-time olarak.✓
- dÖnceden, build sırasında IL'i C++'a çevirerek, ahead-of-time olarak.
Açıklama:Mono bir just-in-time (JIT) runtime'dır: IL2CPP'nin yaptığı gibi önceden native koda çevirmek yerine, ara dili uygulama çalışırken makine koduna derler.
Un Csharp Memory Gc PerformanceZorluk 1
UnityEngine içinde Vector3 nasıl bir C# tipidir?
- aSomut vektör implementasyonlarının miras aldığı soyut bir sınıf.
- bOluşturulduğunda managed heap'te ayrılan sealed bir referans sınıfı.
- cHer desteklenen platformun matematik kütüphanesinin ayrı ayrı uyguladığı bir arayüz.
- dBir struct'tır — değer tipidir, managed heap'te değil, inline saklanır.✓
Açıklama:Vector3 (Quaternion ve çoğu UnityEngine matematik tipi gibi) bir struct'tır: değer tipidir, bu yüzden onu geçirmek ya da kopyalamak tek başına managed heap'te ayırma yapmaz.
Un Csharp Memory Gc PerformanceZorluk 1
Physics.RaycastAll ile Physics.RaycastNonAlloc arasındaki temel pratik fark nedir?
- aRaycastNonAlloc, yeni bir dizi ayırmak yerine isabetleri senin verdiğin diziye yazar.✓
- bRaycastNonAlloc, RaycastAll'dan farklı bir physics layer'daki collider'ları algılayabilir.
- cRaycastAll arka plan thread'inde çalışırken RaycastNonAlloc her zaman ana thread'de çalışır.
- dRaycastNonAlloc trigger collider'ları tamamen yok sayar, RaycastAll ise her zaman dahil eder.
Açıklama:Physics.RaycastAll her çağrıda yeni bir RaycastHit[] ayırıp döndürür. Physics.RaycastNonAlloc ise senin verdiğin bir RaycastHit[] buffer'ı doldurur, böylece tekrar tekrar (örn. her karede) çağrılması hiç çöp üretmez.
Un Csharp Memory Gc PerformanceZorluk 1
Normal bir managed dizinin aksine, bir NativeArray<T> neden Dispose() çağrılmasını manuel olarak gerektirir?
- aNativeArray<T> aslında altta managed bir dizidir, sadece daha katı bir API'ye sahiptir.
- bNativeArray<T>, garbage collector'ın kontrolü dışında yaşayan unmanaged bellek sarmalar.✓
- cDispose() çağırmak sadece bir stil kuralıdır; runtime onu zaten kare sonunda serbest bırakır.
- dNativeArray<T> belleği, dizi scope dışına çıktığı anda otomatik olarak serbest kalır.
Açıklama:NativeArray<T>, bir Allocator kullanarak unmanaged (native) bellek ayırır. Garbage collector bunu asla izlemez ya da serbest bırakmaz, bu yüzden sen açıkça Dispose() çağırana kadar bellek ayrılmış kalır.