มีการบอกว่าสามารถลดเวลาโหลดของ GTA Online จาก 6 นาทีเหลือราว 1 นาที 50 วินาทีได้ ด้วยการแก้ฟังก์ชันง่าย ๆ เพียง 2 จุดที่เป็นคอขวด
นี่ไม่ใช่แพตช์ทางการ แต่เป็นผลการทดลองที่ผู้เขียนแก้เฉพาะ 2 ฟังก์ชันที่มีปัญหาด้วยการทำ dll hooking ดูแล้วออกมาแบบนี้เอง พอคิดว่าบริษัท Rockstar Games ซึ่งทำรายได้จาก GTA Online เพียงอย่างเดียวไปแล้วมากกว่า 1 ล้านล้านวอน นับตั้งแต่เปิดตัวช่วงปลายปี 2013 จนถึงตอนนี้ กลับยังไม่ได้แก้ปัญหาง่าย ๆ นี้ ก็รู้สึกว่าเกินไปหน่อยเหมือนกัน
ด้านล่างนี้คือสรุปสั้น ๆ ของจุดคอขวดเหล่านั้น ต้นฉบับเขียนไว้สนุกและละเอียดมาก ทั้งการวัดประสิทธิภาพ การหาต้นตอปัญหา และวิธีแก้ไข (พร้อมโค้ด) แนะนำให้อ่านกันครับ
- Json parsing with sscanf
- โค้ดของเกมทำการพาร์สไฟล์ json แค็ตตาล็อกไอเท็มขนาดใหญ่ถึง 10MB และเรียกใช้ฟังก์ชัน
sscanfกับแต่ละรายการ (มากถึงประมาณ 63,000 รายการ)
ฟังก์ชัน strlen ที่ sscanf เรียกใช้นั้น ต้องอ่านทีละตัวอักษรไปจนถึงท้ายไฟล์เพื่อหาความยาวของสตริง
- มันจึงเสียเวลาเพิ่มอีก 1 นาที 30 วินาทีไปกับการอ่านสตริงขนาด 10MB ซ้ำต่อเนื่องถึง 63,000 ครั้ง
- Hash key not used
-
ต่อเนื่องจากข้อด้านบน ตอนนำข้อมูลไอเท็มที่พาร์สแล้วใส่ลงอาร์เรย์ โค้ดกลับค้นหาตำแหน่งสำหรับแทรกค่าด้วยการไล่เช็กแบบลำดับทีละตัวตั้งแต่ "ตำแหน่งเริ่มต้นของอาร์เรย์"
-
แม้จะใช้ค่าแฮชเพื่อตรวจว่าข้อมูลที่จะเก็บซ้ำหรือไม่ แต่กลับไม่ได้ใช้แฮชแมป ทำให้เสียเวลาเพิ่มอีกราว 1 นาที 40 วินาทีไปกับการตรวจสอบเพื่อหาตำแหน่งแทรกถึง
((63000^2+63000)/2)ครั้ง
ยังไม่มีความคิดเห็น