13 điểm bởi dynalloc 2021-03-01 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Người viết cho biết đã giảm thời gian tải của GTA Online từ 6 phút xuống còn khoảng 1 phút 50 giây chỉ bằng cách sửa 2 hàm rất đơn giản gây ra nút thắt cổ chai.

Đây không phải bản vá chính thức; tác giả chỉ thử nghiệm bằng cách hook DLL và sửa đúng 2 hàm gây vấn đề. Thật khó tin khi Rockstar Games, công ty đã kiếm hơn 1 nghìn tỷ won doanh thu chỉ riêng từ GTA Online kể từ khi ra mắt vào cuối năm 2013 đến nay, lại chưa xử lý vấn đề đơn giản này.

Bên dưới là phần tóm tắt ngắn về các nút thắt cổ chai. Bài gốc còn trình bày rất thú vị và chi tiết cả phần đo hiệu năng, xác định vấn đề và cách khắc phục (kèm mã), nên rất đáng đọc.

  1. Json parsing with sscanf
  • Mã của game phân tích một file JSON danh mục vật phẩm nặng tới 10MB, và với mỗi mục trong đó (khoảng 63.000 mục), hàm sscanf lại được gọi.

Hàm strlen được sscanf gọi đã đọc từng ký tự một cho tới tận cuối file để tính độ dài chuỗi.

  • Việc đọc liên tiếp chuỗi 10MB tới 63.000 lần đã làm tốn thêm 1 phút 30 giây.
  1. Hash key not used
  • Ngay sau bước trên, khi đưa thông tin vật phẩm đã phân tích vào mảng, chương trình lại tìm vị trí chèn bằng cách duyệt tuần tự "từ đầu mảng".

  • Dù có dùng giá trị hash để kiểm tra dữ liệu lưu có bị trùng hay không, họ lại không dùng hash map, nên chỉ riêng việc tìm vị trí chèn đã phải thực hiện tới ((63000^2+63000)/2) lần kiểm tra, làm tốn thêm 1 phút 40 giây.

Chưa có bình luận nào.

Chưa có bình luận nào.