2010-07-16 46 views
14

Tôi đang cố gắng sử dụng gson để lập bản đồ đối tượng của mình trên trình giả lập Android.android: hiệu suất gson

Nó đã được ridiculously chậm khi xử lý dữ liệu json khoảng 208 kb. Tôi không có bất kỳ hệ thống phân cấp nào trong json của tôi.

Sau khi ánh xạ đối tượng được thực hiện, tôi có thể thấy rằng gson tạo khoảng 500 bản ghi.

Mất hơn 3 phút trên trình giả lập Android để ánh xạ json đầu vào.

Tôi đã chú thích thực thể của mình bao gồm các chuỗi và vài phao nổi.

Tôi thiếu gì đó?

Bất kỳ ý tưởng nào, thực tiễn tốt nhất sẽ giúp ích rất nhiều.

Có cách nào nhanh chóng phản ánh ánh xạ dữ liệu json không?

 URL myURL = new URL(url); 
     /* Open a connection to that URL. */ 
     URLConnection ucon = myURL.openConnection(); 
     /* 
     * Define InputStreams to read from the URLConnection. 
     */ 
     InputStream is = ucon.getInputStream(); 
     InputStreamReader reader = new InputStreamReader(is); 
     long tickCount = System.currentTimeMillis(); 
     Policy[] policies = new Gson().fromJson(reader, Policy[].class); 
     long endCount = System.currentTimeMillis() - tickCount; 
     Log.d("Time to pull policies in milliseconds", "" + endCount); 
+0

Vui lòng không sử dụng trình mô phỏng Android để đo lường hiệu suất. Đó là mô hình hiệu suất khác biệt đáng kể so với thiết bị thực. –

Trả lời

5

Tôi đã nhìn thấy những câu hỏi như thế này đưa ra trước đó, và sự đồng thuận chung là Jackson là nhanh hơn nhiều so Gson. Xem các liên kết sau để biết thêm thông tin:

Đây là một trong đó đặc biệt thảo luận về Android: http://ubikapps.net/?p=525

2

Bạn muốn có lẽ có được hiệu suất tốt hơn e nếu bạn bọc InputStream trong một số BufferedInputStream với bộ đệm lớn đẹp ...

3 phút là mất trí. Tôi hiếm khi chạy giả lập nhưng tôi có một ứng dụng với một tài sản JSON ~ 1.1MB và mất khoảng 5 giây để tải và xử lý trên phần cứng.

(Điều nào vẫn còn quá dài, nhưng vẫn còn).

+0

Tôi đang chiến đấu với cùng một vấn đề. Bạn có hướng dẫn trực tuyến mô tả giải pháp của bạn không? –

4

Bạn đã thử trộn bộ phân tích cú pháp phát trực tuyến GSON với đối tượng Gson chưa? http://sites.google.com/site/gson/streaming (tìm ví dụ đọc hỗn hợp).

Cách tiếp cận này có thể hữu ích vì Gson đọc toàn bộ cây phân tích và sau đó hành động trên đó. Với một danh sách mảng lớn, việc đọc trong tất cả các phần tử và cố gắng phân tích cú pháp có thể gây ra nhiều hoán đổi bộ nhớ (hoặc đập). Cách tiếp cận này sẽ đọc trong một phần tử tại một thời điểm.

Hy vọng điều này sẽ hữu ích.

+2

+1 - cách tiếp cận DOM trên GSON nhanh chóng triển khai, nhưng thực sự chậm để xử lý các phản hồi lớn. Tôi sử dụng nó cho nguyên mẫu, và sau đó tối ưu hóa xuống phương pháp Streaming cho sản xuất. Tôi nghĩ nhiều người cần phải nhận ra GSON không quá chậm, cách bạn sử dụng nó (không nói nó là nhanh nhất, chỉ là nhiều người không sử dụng streaming) –

1

Tôi thấy rằng tôi có thể tăng tốc gson.fromJSON khá đáng kể bằng cách không mô hình hóa tất cả các phần tử trong JSON mà tôi không cần. GSON sẽ vui vẻ điền vào chỉ những gì được chỉ định trong các lớp trả lời của bạn.

0

Tôi nhận thấy rằng TẠO một cá thể Gson là một hoạt động rất tốn kém, cả về mặt CPU được sử dụng và bộ nhớ được cấp phát.

Vì các trường hợp Gson an toàn theo luồng, việc xây dựng và sử dụng lại một cá thể tĩnh đơn lẻ sẽ trả hết, đặc biệt nếu bạn đang sắp xếp/deserializing thường xuyên.

Các vấn đề liên quan