2011-11-29 35 views
6

Tôi gặp vấn đề về bộ nhớ lạ Tôi đang gặp sự cố khi giải quyết và sẽ đánh giá cao một số lời khuyên về nơi khác.Cảnh báo và sự cố bộ nhớ iPhone - nhưng Công cụ hiển thị mức sử dụng bộ nhớ thấp

Chương trình tôi có (Ứng dụng iPhone) có chức năng theo đó về cơ bản tải xuống các tệp, xử lý các tệp đó là JSON và lưu phần còn lại vào đĩa. Việc xử lý JSON là CPU chuyên sâu và có thể mất vài giây cho mỗi tệp, vì vậy tôi có một NSOperationQueue với maxConcurrency được giới hạn là 1 xử lý tất cả việc nâng hạng nặng và hàng đợi quản lý nhiều tệp để tải xuống.

Kể từ khi iOS5 xuất hiện, Ứng dụng đã gặp sự cố khi hoàn thành chuỗi tải xuống mà không gặp sự cố và cho đến nay những gì tôi đã thử là;

1) Đã thay đổi performSelectorOnBackgroundThử xử lý JSON để sử dụng một NSOperationQueue duy nhất để hạn chế số chuỗi nền hoạt động với các đối tượng lớn.

2) Đã thêm NSAutoReleasePools bên trong vòng lặp tạo nhiều đối tượng lớn, thoáng qua.

3) Làm sạch sharedURLCache để đảm bảo các tệp không bị treo trong bộ đệm hệ thống.

4) Lưu trữ các đối tượng JSON vào đĩa bằng NSKeyedArchiver và truyền tên tệp giữa các chủ đề thay vì các đối tượng thực, để thử giảm thiểu số lượng và kích thước của các đối tượng được lưu trữ hiện đang sử dụng.

Tất cả những điều này lúc đầu dường như tạo sự khác biệt, và khi tôi xem xét phân bổ bộ nhớ, giờ đây tôi đã đạt mức sử dụng tối đa chỉ hơn 20MB (do đó không ngạc nhiên khi nó bị rơi) xuống dưới 10MB và nhưng ứng dụng vẫn bị lỗi với bộ nhớ thấp như trước đây.

Tôi đang cố gắng để theo dõi những gì đang ăn bộ nhớ gây ra các ứng dụng sụp đổ và vào dịp này tôi đang gặp vấn đề thực sự thuyết phục cụ để cho tôi biết bất cứ điều gì hữu ích.

Dưới đây là một dấu vết đặc trưng (trên iPhone 3GS chạy iOS 4.3.5)

enter image description here

Bạn có thể thấy rằng việc sử dụng PEAK là một tad hơn 7MB nhưng ngay sau đó, bạn sẽ nhìn thấy 2 cờ liên quan đến bộ nhớ thấp, và sau đó cấp bách bộ nhớ thấp, theo sau là ứng dụng chấm dứt ngay sau đó.

Nếu tôi sử dụng màn hình bộ nhớ, nguyên nhân gây ra sự cố có vẻ đủ rõ ràng - bộ nhớ vật lý đang cạn kiệt - nhìn vào dấu vết màu lục nhạt bên dưới. Các cảnh báo bộ nhớ thấp co-incide (không ngạc nhiên) với bộ nhớ vật lý chạy ra ngoài.

enter image description here

Không có rò rỉ cho thấy FWIW một trong hai (Tôi đã làm điều đó trong lần chạy khác).

Không phải bộ đệm hình ảnh hoặc bộ nhớ cache NSURLConnection và điều duy nhất tôi có thể nghĩ là có thể có một số rò rỉ không được phát hiện ... nhưng tôi gặp sự cố khi nhận dạng chúng vì nếu tôi nhấp vào tất cả phân bổ để xem các đối tượng đang hoạt động, sau đó thực hiện lệnh A để chọn tất cả (để dán chúng vào bảng tính để xem vị trí bộ nhớ), tại điểm tôi nhấn lệnh C để sao chép chúng , Dụng cụ beachballs và không bao giờ phục hồi.

Tôi thực sự không thể hiểu được điều gì đang xảy ra.Có ai có một số lời khuyên về cách thuyết phục các công cụ để chỉ cho tôi một số thông tin hữu ích hơn về những gì đang sử dụng bộ nhớ này?

Xin lỗi tôi không thể đăng bất kỳ đoạn mã có ý nghĩa nào ... hy vọng các ảnh chụp màn hình cụ ít nhất sẽ cung cấp cho bạn ý tưởng về nơi tôi đến.

+0

Bạn đã nói những rắc rối của mình bắt đầu với iOS 5, nhưng dấu vết của bạn là trên 4.3? (Và nó có vấn đề!) –

+0

Có, vấn đề lần đầu tiên được phát hiện với iOS5, và lúc đầu nó dường như bị hạn chế đối với các thiết bị iOS5, nhưng hiện tại trong quá trình thử nghiệm, nó dường như không hoạt động trên các hệ thống khác. Tôi nghĩ rằng chúng tôi đang xem xét nó chặt chẽ hơn để phiên bản iOS có thể, hoặc có thể không có liên quan. – Roger

Trả lời

6

Công cụ Rò rỉ không phải là hữu ích khủng khiếp để tìm ra bất cứ điều gì trừ những rò rỉ rõ ràng trong ứng dụng của bạn.

Những gì bạn mô tả là một ứng cử viên lý tưởng cho phân tích heapshot.

tl; dr Heapshot analysis cho phép bạn xem chính xác cách ứng dụng của bạn tăng lên giữa hai thời điểm bất kỳ (nơi bạn xác định điểm).

+0

Cảm ơn, tôi đã tìm thấy blog heapshot của bạn cách đây một tuần hoặc lâu hơn và thấy nó hữu ích nhất (+1). Tôi đã làm một số phân tích và không nhìn thấy bất cứ điều gì untoward, nhưng tôi sẽ chạy qua nó một lần nữa vào buổi sáng và nhìn lại như có lẽ tôi đã thiếu những gì nó có thể đã nói với tôi. – Roger

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