- Katılım
- 2 Şub 2025
- Konular
- 2
- Mesajlar
- 4
- Online süresi
- 8d 17h
- Reaksiyon Skoru
- 3
- Altın Konu
- 0
- TM Yaşı
- 1 Yıl 4 Ay 2 Gün
- Başarım Puanı
- 23
- MmoLira
- 2,639
- DevLira
- 3
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
ENABLE_OPTIMIZATION_ITEMPROTO_O1
- Aşağıdaki direktif eklendi:
- Server/common/CommonDefines.h
- #define ENABLE_OPTIMIZATION_ITEMPROTO_O1
- Server/common/CommonDefines.h
- Game Core:
- Server/game/src/item_manager.h
- m_map_itemProtoByVnum (TR1_NS::unordered_map<DWORD, TItemTable*>)
- m_map_itemProtoByRangeCache (TR1_NS::unordered_map<DWORD, TItemTable*>)
- Server/game/src/item_manager.cpp
- Initialize() sırasında O(1) map yapısı oluşturuldu,
- reload sırasında yapılar temizleniyor (m_vec_item_vnum_range_info, m_map_vid, O(1) map’ler),
- GetTable() ilgili direktif altında O(1) yoluna geçirildi + range/cache fallback korundu.
- Server/game/src/item_manager.h
- DB Core:
- Server/db/src/ClientManager.h
- m_map_itemTableByVnum ilgili direktif altında boost::unordered_map olarak değiştirildi.
- Server/db/src/ClientManager.h
Önceden sunucu item verisini daha yavaş bir yöntemle arıyordu.
Şimdi ise vnum üzerinden daha hızlı bir arama sistemi eklendi.
Tam olarak ne yapıldı?
unordered_map tipinde map’ler eklendi. Bu sayede item proto çok daha hızlı bulunabiliyor.
Şunun yerine:
- ara yapılarda arama yapmak,
- ya da daha yavaş bir arama çalıştırmak,
sunucu artık şunları yapabiliyor:
- doğrudan vnum değerini kontrol etmek,
- ve ilgili TItemTable verisini almak.
Bu neden daha hızlı?
Çünkü önceden lookup yaklaşık olarak şöyleydi:
- O(log n),
ya da kullanılan yola göre daha yavaş,
şimdi ise:
- exact lookup’lar için ortalama O(1).
Yani:
- item ile ilgili işlem sayısı ne kadar fazlaysa,
- bu değişikliğin anlamı ve katkısı o kadar büyük olur.
Bu nerelerde önem kazanıyor?
Özellikle hot path’lerde, yani sunucunun itemlerle çok sık çalıştığı yerlerde:
- char_item.cpp
- shop_manager.cpp
- item.cpp
- cube.cpp
- mağaza sistemleri,
- questler,
- tombala,
- item oluşturma işlemleri
Range kullanan itemlerde durum ne?
dwVnumRange için eski mantık korunmuştur.
Yani:
- exact vnum doğrudan map üzerinden bulunur,
- item range üzerinden çalışıyorsa yine fallback ve cache ile işlenmeye devam eder.
Proto reload durumunda ne oluyor?
Reload sırasında:
- eski map’ler temizleniyor,
- cache temizleniyor,
- her şey baştan yeniden oluşturuluyor.
Bu önemlidir çünkü map’ler m_vec_prototype içindeki verilere işaretçi tutuyor.
Eğer yeniden oluşturulmazlarsa eski veya geçersiz kayıtlar kalabilirdi.
Pointer güvenliği nasıl sağlandı?
Geliştirici bunu şu şekilde ele aldı:
- exact/range map’ler Initialize() sırasında yeniden oluşturuluyor,
- eski yardımcı yapılar da temizleniyor,
- mevcut itemler yine SetProto(GetTable(...)) ile proto almaya devam ediyor.
Yani amaç, reload sonrasında eski pointer’ların kalmamasını sağlamaktır.
Gerçek etkisi nedir?
Tüm core’un sihirli şekilde %50 daha hızlı olmasını beklemeyin.
Daha gerçekçi olarak:
- tekil proto lookup artık daha ucuz,
- tüm core birkaç % CPU kazanabilir,
- en büyük etki, item işlemlerinin yoğun olduğu yerlerde görülür.
---------------------------------------------------------------------------------
Ekli dosyalar
- Katılım
- 25 Eki 2023
- Konular
- 384
- Mesajlar
- 942
- Çözüm
- 18
- Online süresi
- 1mo 1d
- Reaksiyon Skoru
- 1,149
- Altın Konu
- 171
- Başarım Puanı
- 207
- MmoLira
- 2,151
- DevLira
- 12
Paylaşım için teşekkürler.
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 2
- Görüntüleme
- 215
- Cevaplar
- 11
- Görüntüleme
- 1K
- Cevaplar
- 1
- Görüntüleme
- 88
- Cevaplar
- 14
- Görüntüleme
- 755
- Kilitli
- Cevaplar
- 4
- Görüntüleme
- 358











