Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity'de NativeHashMap Kullanımı: Performans Optimizasyonu için Gelişmiş Bir Sözlük

Paylaşan: Unity Eğitim 22 September 2025 3 dakika okuma 54 görüntülenme

Unity oyun geliştirme sürecinde, verimli veri yapıları kullanmak performans açısından kritik öneme sahiptir. Özellikle büyük miktarda veriyle çalışırken, standart C# sözlükleri (Dictionary<TKey, TValue>) performans darboğazlarına yol açabilir. Bu noktada, Unity'nin sunduğu yüksek performanslı bir veri yapısı olan NativeHashMap<TKey, TValue> devreye girer.

NativeHashMap Nedir?


NativeHashMap<TKey, TValue>, Unity'nin yüksek performanslı Jobs System ve Burst Compiler ile uyumlu, yerel (native) bir sözlüktür. Standart Dictionary'den farklı olarak, NativeHashMap, yönetilen bellek (managed memory) yerine yerel bellek (unmanaged memory) kullanır. Bu, garbage collection (GC) işlemlerinin maliyetini azaltarak performansı önemli ölçüde artırır. Özellikle çoklu iş parçacığı (multithreading) ortamlarında ve performans kritik işlemlerinde büyük avantaj sağlar.

NativeHashMap'in Avantajları



  • Yüksek Performans: Yerel bellek kullanımı ve GC'den bağımsız olması sayesinde standart Dictionary'e göre çok daha hızlıdır.

  • Jobs System ve Burst Compiler Uyumluluğu: Paralel programlama ve performans optimizasyonu için idealdir.

  • Güvenlik: NativeHashMap, güvenli bir şekilde çoklu iş parçacığı ortamlarında kullanılabilir.

  • Bellek Yönetimi: Yerel bellek kullanımı, bellek yönetimini daha verimli hale getirir.


NativeHashMap Kullanımı


NativeHashMap<TKey, TValue> kullanmak için öncelikle Unity.Collections namespace'ini eklemeniz gerekir:
using Unity.Collections;

Ardından, NativeHashMap örneği oluşturup kullanabilirsiniz:

NativeHashMap<int, string> myHashMap = new NativeHashMap<int, string>(100, Allocator.Persistent);

//Eleman ekleme
myHashMap[1] = "Bir";
myHashMap[2] = "İki";
myHashMap[3] = "Üç";

//Elemana erişim
string value = myHashMap[2]; // value = "İki"

//Eleman silme
myHashMap.Remove(2);

//HashMap boş mu kontrolü
if(myHashMap.IsEmpty)
{
// İşlemler
}

//HashMap'in boyutunu öğrenme
int count = myHashMap.Length;

//HashMap'i temizleme
myHashMap.Clear();

//HashMap'i serbest bırakma (önemli!)
myHashMap.Dispose();


Allocator.Persistent


Yukarıdaki örnekte Allocator.Persistent kullanılmıştır. Bu, NativeHashMap'in ömrünün manuel olarak yönetilmesi gerektiğini belirtir. Dispose() metodu ile bellek serbest bırakılmalıdır. Allocator.Temp veya Allocator.TempJob gibi diğer seçenekler de mevcuttur, ancak bunlar geçici kullanım içindir ve otomatik olarak belleği serbest bırakırlar.

Performans Karşılaştırması


NativeHashMap ve standart Dictionary arasındaki performans farkı, veri boyutuyla doğru orantılıdır. Büyük veri kümeleriyle çalışırken NativeHashMap'in performans avantajı çok daha belirgin hale gelir. [YOUTUBE_VIDEO_BURAYA] Aşağıdaki tabloda, örnek bir performans karşılaştırması gösterilmektedir (değerler örnektir ve sistem yapılandırmasına bağlı olarak değişebilir):

























Veri Boyutu Dictionary (ms) NativeHashMap (ms)
1000 10 5
10000 100 15
100000 1000 50

Örnek Senaryolar


NativeHashMap, birçok oyun geliştirme senaryosunda kullanılabilir:

  • Oyuncu Envanteri: Oyuncu eşyalarının yönetimi için hızlı ve verimli bir şekilde kullanılabilir.

  • Düşman Yapay Zeka (AI): Düşmanların durumlarının ve özelliklerinin takibi için kullanılabilir.

  • Veri Tabanları: Oyun verilerinin hızlı bir şekilde erişilmesi ve yönetimi için kullanılabilir.

  • Level Tasarımı: Leveldeki nesnelerin ve özelliklerin yönetimi için kullanılabilir.


Sonuç


NativeHashMap<TKey, TValue>, Unity oyun geliştirmede performansı önemli ölçüde artırmak için güçlü bir araçtır. Özellikle büyük veri kümeleriyle çalışırken ve çoklu iş parçacığı ortamlarında kullanıldığında, standart Dictionary'e göre çok daha hızlı ve verimli sonuçlar elde edilmesini sağlar. Ancak, Dispose() metodunu kullanarak belleği serbest bırakmayı unutmamak önemlidir.

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!