2012-10-21 33 views
5

Tôi đang tìm một số lời khuyên về cách sử dụng Profiler thời gian của dụng cụ để tăng cường một hoạt động cụ thể. Tôi có chế độ xem cuộn trang để tải nội dung theo yêu cầu. Khi trang mới được cuộn đến, trang khác được tải hai trang ở bên phải. Điều này xảy ra khi trang hiện tại được cuộn 50% màn hình, và trên các thiết bị chậm hơn tải là đủ của một cổ chai mà nó làm gián đoạn độ trơn của cuộn giấy. Cuộn cảm thấy như nó dừng lại rất nhanh tại 50% pint và sau đó nhảy trở lại vào hành động.Hiệu năng đo điểm chuẩn bằng cách sử dụng các dụng cụ

Tôi nên lưu ý rằng không có thành phần mạng nào trong ứng dụng của tôi, vì vậy cổ chai không trong khi dữ liệu được tìm nạp - đó là tất cả trong quá trình tải chế độ xem mới.

Khi tôi làm việc để cải thiện điều này, tôi cần đánh giá quá trình chuyển đổi để tôi có thể đánh giá hiệu quả của các cải tiến của tôi. Sau khi xem các phiên WWDC, tôi hiểu những điều cơ bản về trình thu thập thông tin thời gian nhưng tôi không tự tin rằng tôi đang nhìn vào điều đúng đắn.

Tôi đang chạy công cụ và sau đó thực hiện cuộn. Tôi thấy sự tăng đột biến dự kiến ​​trong hoạt động của CPU. Tôi sau đó chọn cành và nhìn vào tên biểu tượng. Như bạn có thể thấy bên dưới, khi tôi ẩn các thư viện hệ thống và hiển thị Obj-C, tôi đang xử lý một khoảng thời gian ngắn 90% với 81.0 ms thời gian chạy.

enter image description here

Sự nhầm lẫn của tôi xuất hiện khi tôi đi sâu vào mã của mình. Tôi thấy rằng một trong những người đóng góp lớn nhất (23 ms) là một thói quen nhỏ chỉ sử dụng sortedArrayUsingDescriptors. Tôi không thể làm gì nhiều về điều đó. Lần khác, nguyên nhân gốc rễ của tôi sẽ sử dụng CGRectInset - một vài phần nghìn giây nữa. Tôi đoán tôi dự kiến ​​sẽ thấy nhiều hơn liên quan đến việc sử dụng hình ảnh hoặc một cái gì đó như thế.

Tôi đoán tôi không biết liệu tôi có đang chuẩn bị đúng thứ hay không. Tôi có thực sự muốn thử và giảm hoạt động 6ms xuống 5ms và mong đợi có sự khác biệt không? Tôi có đang xem xét các công cụ phù hợp để chẩn đoán sự cố của mình không?

Mọi mẹo hoặc hướng dẫn về những gì cần đo lường và nơi tập trung nỗ lực của tôi sẽ thực sự có giá trị.

+0

Nếu sắp xếp mảng đang mất thời gian, đó là nơi bạn nên tập trung nỗ lực của mình. Tại sao bạn phân loại mảng sau đó? Nó có thể được sắp xếp trước không? Nó có phải là một mảng không? – jrturton

+1

Và có vẻ như bạn đang làm điều đúng như xa như việc sử dụng các công cụ của bạn là có liên quan. Phương thức đó và cellForRowAtIndexPath có vẻ là nơi mà hầu hết thời gian của bạn đang diễn ra. Bấm đúp để hiển thị các điểm nóng thực tế trong mã nguồn của bạn. – jrturton

+0

Cảm ơn bạn đã xem qua. Tôi có một lớp dữ liệu cốt lõi với một tập hợp các mục. Để thuận tiện, tôi đã thêm một phương thức orderedItems vào lớp đó. Khi tôi cần văn bản cho một ô, ví dụ, tôi sử dụng orderItems để tìm đúng mục. Có lẽ tôi có thể cạo một vài ms bằng cách lưu vào bộ nhớ đệm này trên lớp và bằng cách nào đó cập nhật nó bất cứ khi nào các mục thay đổi. –

Trả lời

1

Cân nhắc sử dụng công văn trung tâm lớn để thực hiện nhiều công việc không phải giao diện người dùng (tìm nạp, sắp xếp, chọn v.v.) càng nhiều càng tốt trên chuỗi nền. Điều này sẽ tận dụng sức mạnh của máy đa CPU và giúp bạn thoát khỏi chủ đề chính nhanh hơn. Chỉ sử dụng chủ đề chính cho ui làm việc khi cần thiết.

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