13 poin oleh dynalloc 2021-03-01 | Belum ada komentar. | Bagikan ke WhatsApp

Katanya, dengan memperbaiki dua fungsi yang sangat sederhana yang menyebabkan bottleneck, waktu loading GTA Online yang semula 6 menit bisa dipangkas menjadi sekitar 1 menit 50 detik.

Ini bukan patch resmi; penulis hanya bereksperimen dengan memperbaiki dua fungsi bermasalah lewat hooking DLL. Agak keterlaluan juga rasanya bahwa Rockstar Games, yang sejak peluncuran akhir 2013 hingga sekarang telah meraup pendapatan lebih dari 1 triliun won hanya dari GTA Online, tidak pernah menyelesaikan masalah sederhana ini.

Di bawah ini saya rangkum singkat isi bottleneck tersebut. Di artikel aslinya, pengukuran performa, identifikasi masalah, hingga cara penyelesaiannya (kode) ditulis dengan menarik dan sangat rinci, jadi wajib dibaca.

  1. Json parsing with sscanf
  • Kode game mem-parsing file JSON katalog item berukuran 10MB, dan untuk setiap entri (sekitar 63.000 buah), fungsi sscanf dipanggil.

Fungsi strlen yang dipanggil oleh sscanf membaca sampai ke akhir file, satu karakter demi satu karakter, untuk menghitung panjang string.

  • Karena membaca string 10MB itu sebanyak 63.000 kali berturut-turut, proses ini membuang tambahan waktu 1 menit 30 detik.
  1. Hash key not used
  • Tepat setelah bagian di atas, saat memasukkan informasi item yang telah diparsing ke dalam array, kode tersebut mencari posisi penyisipan dengan penelusuran berurutan "dari awal array".

  • Meskipun memakai nilai hash untuk memeriksa apakah data yang disimpan duplikat, kode itu tidak menggunakan hash map, sehingga hanya untuk mencari posisi penyisipan saja harus melalui proses pemeriksaan sebanyak ("(63000^2+63000)/2") kali, yang menambah sekitar 1 menit 40 detik lagi.

Belum ada komentar.

Belum ada komentar.