2011-12-02 12 views
6

Tôi đang lập hồ sơ đăng ký với các công cụ. Các hồ sơ được thực hiện sử dụng phân bổ cụ theo hai cách:Sự mơ hồ trong việc sử dụng Công cụ phát triển iOS

  1. Bằng cách lựa chọn trực tiếp các phân bổ khi tôi chạy App cho Profiling
  2. bằng cách chọn Rò rỉ khi tôi chạy App cho Profiling.

Trong cả hai trường hợp, tôi đã bật công cụ Phân bổ để thử nghiệm. Nhưng đáng ngạc nhiên, tôi đã có hai loại khác nhau của Out đưa cho Allocations ở những trường hợp này.

Chúng có hoạt động khác nhau không? hoặc đây là một vấn đề với dụng cụ.

Thời gian tôi hồ sơ với Rò rỉ Tool:

Trong phân bổ Graph: enter image description here 1. tôi nhận được rất nhiều Peaks trong Graph, The byte Live and byte tổng thể là tương tự. 2. Tôi nhận được các lá cờ đen (Tôi nghĩ rằng nó báo động về cảnh báo bộ nhớ) sau 1 phút sử dụng. Sau đó, sau khi một bộ cờ xuất hiện, lỗi ứng dụng của tôi. (Điều này xảy ra vào những thời điểm, thậm chí khi trực tiếp chạy App trong Device)

Hiện tôi hồ sơ với Công cụ Allocation:

Trong phân bổ Graph: enter image description here 1. Tôi không nhận được đỉnh núi thường như nó đã được trong trường hợp trên. Các byte trực tiếp luôn nhỏ hơn byte tổng thể. 2. Tôi đã sử dụng hơn 20 phút và không bao giờ có cờ Đen.

Một thực tế tôi biết là, khi byte trực tiếp và byte tổng thể bằng nhau, NSZombieEnabled có thể được bật.

Có bất kỳ ai trong số các bạn từng gặp sự cố này.

UPDATE 1:

tôi phải đối mặt với một vấn đề khác với trường hợp đầu tiên. Bất cứ khi nào tôi profiled sau một thời gian ngắn (so với hồ sơ trong trường hợp thứ hai), ứng dụng có rất nhiều Cờ đen và ứng dụng của tôi Crashed. (Do cảnh báo bộ nhớ)

Và khi tôi thử bước tương tự bằng cách sử dụng bước Ứng dụng, ứng dụng của tôi không bị lỗi và không có cờ.

Tại sao sự khác biệt này?

Trả lời

9

Trong trường hợp đầu tiên, bạn chỉ theo dõi phân bổ trực tiếp vì mẫu "Rò rỉ" định cấu hình công cụ Phân bổ theo cách đó. Trong lần thứ hai, bạn đang theo dõi cả phân bổ trực tiếp và được phân phối lại. (Như CocoaFu đã nói).

Cả hai đều hữu ích, nhưng vì các lý do hơi khác nhau.

Chỉ theo dõi phân bổ trực tiếp (kết hợp với Phân tích Heapshot, thường), là một cách tuyệt vời để phân tích tăng trưởng heap vĩnh viễn trong ứng dụng của bạn.Một khi bạn biết những gì được gắn bó xung quanh mãi mãi, bạn có thể tìm ra lý do tại sao và xem nếu có những cách để tối ưu hóa nó đi.

Theo dõi tất cả phân bổ, còn sống và đã chết, là một phương tiện rất hiệu quả để theo dõi băng thông phân bổ. Bạn có thể sắp xếp theo byte tổng thể và bắt đầu bằng số lớn nhất. Hãy xem xét tất cả các điểm phân bổ (nhấp vào mũi tên nhỏ bên cạnh nhãn trong Danh mục của hàng đã chọn) và xem tất cả các phân bổ đến từ đâu.

Ví dụ: biểu đồ của bạn cho thấy rằng có 1,27 MB phân bổ 14 byte - 9218 phân bổ - trong khoảng thời gian đó. Tất cả đã được miễn phí() d [tốt!], Nhưng điều đó vẫn đại diện cho một loạt các công việc để phân bổ, điền vào với dữ liệu (có lẽ), và miễn phí cho mỗi một trong số đó. Nó có thể là một vấn đề, có thể không.

(Để thực hiện điều này theo quan điểm, tôi đã sử dụng kỹ thuật này để tối ưu hóa ứng dụng. Chỉ đơn thuần là tập trung vào việc giảm số lần phân bổ ngắn hạn tạm thời, tôi có thể làm cho thuật toán chính của ứng dụng nhanh hơn 5x và giảm mức sử dụng bộ nhớ đến 85%. Tắt ứng dụng đang sao chép nhiều chuỗi, nhiều lần.)


Không chắc chắn tại sao ứng dụng của bạn bị lỗi như mô tả. Vì đây là cảnh báo bộ nhớ, bạn nên xem những gì được phân bổ thường xuyên nhất.

Hãy nhớ rằng nếu bạn đã bật tính năng phát hiện zombie, điều đó sẽ mất rất nhiều bộ nhớ bổ sung.

+0

bbum: cảm ơn. Tôi đã cập nhật câu hỏi. Bạn có thể làm rõ nghi ngờ của tôi? – Krishnan

2

Tùy thuộc vào cách Phân bổ được khởi tạo có các tùy chọn khác nhau. Kiểm tra các tùy chọn bằng cách nhấp vào biểu tượng "i" trong ô Phân bổ.

Vâng, tôi thấy điều này cũng gây phiền nhiễu.

+0

Lựa chọn nào là đúng? Theo cách nào, mỗi người trong số họ là khác nhau? – Krishnan