Tıkanıklığa yol açan son derece basit iki fonksiyonu değiştirerek, 6 dakika süren GTA Online yükleme süresini 1 dakika 50 saniye seviyesine indirdiğini söylüyor.
Bu resmi bir yama değil; yazarın DLL hooking ile sorunlu iki fonksiyonu düzelterek yaptığı bir deneyin sonucu. 2013 sonlarında çıktığından bu yana yalnızca GTA Online'dan 1 trilyon wonu aşan gelir elde eden Rockstar Games'in bu kadar basit bir sorunu çözmemiş olması gerçekten biraz fazla gibi görünüyor.
Aşağıda darboğazın nedenlerini kısaca özetledim. Orijinal yazıda performans ölçümü, sorunun tespiti ve çözüm yöntemi (kod) da ilgi çekici ve ayrıntılı şekilde anlatılıyor; mutlaka okuyun.
sscanfile JSON ayrıştırma
- Oyun kodu tam 10 MB'lık bir öğe katalog JSON dosyasını ayrıştırırken, her öğe için (tam yaklaşık 63.000 adet)
sscanffonksiyonunu çağırıyordu.
sscanf fonksiyonunun çağırdığı strlen fonksiyonu ise dizgenin uzunluğunu bulmak için dosyanın en sonuna kadar karakter karakter okuyordu.
- 10 MB'lık dizgeyi art arda 63.000 kez okuduğu için buna ek olarak 1 dakika 30 saniye harcıyordu.
- Hash anahtarı kullanılmıyor
-
Yukarıdaki durumun hemen ardından, ayrıştırılan öğe bilgilerini diziye koyarken değerin ekleneceği yeri bulmak için "dizinin başlangıç konumundan itibaren" sıralı arama yapıyordu.
-
Kaydedilen içeriğin yinelenip yinelenmediğini kontrol etmek için hash değeri kullanmasına rağmen hash map kullanmıyordu; bu yüzden yalnızca eklenecek konumu bulmak için
("(63000^2+63000)/2")kez kontrol sürecinden geçerek 1 dakika 40 saniye daha harcıyordu.
Henüz yorum yok.