Tôi đang cố gắng loại bỏ một số lần truy cập hiệu năng của chuỗi chính xảy ra khi tôi phân bổ AVPlayer, AVPlayerItem và AVURLAsset trên chuỗi chính. Có ai có kinh nghiệm di chuyển phân bổ/phát hành các đối tượng này đến một chủ đề nền? Tương tự, một currentItem của AVPlayer có thể được đặt trên một hàng đợi nền?Tạo và hủy các lớp AVFoundation trên hàng đợi nền?
Trả lời
Nói chung, nếu tài liệu không được ghi là an toàn trong tài liệu lớp học, bạn không nên sử dụng đối tượng của lớp đó trên nhiều luồng.
Thêm vào vấn đề, trong khi có lợi khi làm ít hơn trên sợi chính, phân bổ AVPlayer
, AVPlayerItem
và AVURLAsset
sẽ không thực sự là một nút cổ chai mà bạn cần phải lo lắng. Thay vào đó, bạn nên chạy các công cụ và tìm các vấn đề hiệu suất thực tế và tập trung vào những vấn đề đó.
Sau đây chắc chắn sẽ bị tổn thương di chuyển hiệu suất
- Tạo AVPlayer, 10 fps thả
- Thêm chơi AVPlayerLayer, 15 fps thả
- Bắt đầu chơi, 15/25 fps thả
- Tạm dừng chơi , 15 fps drop
- Deallocate AVPlayer, 20 + fps thả
Tôi đã thử phân bổ AVPlayer từ một chuỗi nền, tuy nhiên, AVFoundation sẽ chuyển về chính và thực hiện phân bổ/khởi tạo từ chính. Cùng với chơi/tạm dừng.
Tôi có một số thành công với deallocating AVPlayer/AVPlayerItem trên một chủ đề nền. Về cơ bản bạn cần phải rõ ràng tham chiếu cuối cùng để AVPlayer từ chủ đề nền của bạn.
- 1. Tạo hàng đợi tải lên
- 2. C# Luồng và Hàng đợi
- 3. Hàng đợi ưu tiên STL trên lớp tùy chỉnh
- 4. Tkinter: Đợi mặt hàng trong hàng đợi
- 5. hủy bỏ hàng đợi thực hiệnSelector: afterDelay gọi
- 6. Chủ đề và Hàng đợi
- 7. Sự khác biệt giữa "hàng đợi toàn cầu" và "hàng đợi chính" trong GCD là gì?
- 8. Lớp loại Haskell cho Hàng đợi
- 9. Triển khai hàng đợi dựa trên tệp
- 10. Tạo hàng đợi email bằng PHP?
- 11. Tạo hàng đợi động với Celery
- 12. AVFoundation, cắt các cạnh trong lớp xem trước
- 13. Hàng đợi riêng và công khai trên MSMQ
- 14. Hàng đợi tin nhắn dựa trên Memcache?
- 15. Github: Hàng đợi xếp hàng và yêu cầu kéo
- 16. ios: Hàng đợi trong nền và thực thi khi mạng khả dụng
- 17. Bộ đệm FIFO/Hàng đợi chuyên về các dòng byte
- 18. Triển khai Hàng đợi dựa trên FIFO?
- 19. Hủy tác vụ nền
- 20. Tạo lớp/phá hủy lớp ảo trong delphi
- 21. std :: iteration hàng đợi
- 22. Lớp phủ văn bản và màu nền trên hình ảnh
- 23. Tạo hàng đợi thực thi bằng cách sử dụng Task.ContinueWith?
- 24. hàng đợi truy vấn mysql?
- 25. Ngăn xếp và Hàng đợi, Tại sao?
- 26. Sự khác nhau giữa Hàng đợi Thư Chết và Hàng đợi trả lại là gì?
- 27. cửa sổ C++ thread chờ đợi trên hàng đợi đẩy dữ liệu
- 28. Hàng đợi thông thường so với hàng đợi SEDA
- 29. Cách nhận hàng đợi liên tục trên Android
- 30. Có thể tạo Hàng đợi cho bộ HashMap không?
Tôi nhận thấy đây không phải là trường hợp. Phân bổ một mục AVPlayer với một URL có xu hướng làm chậm hiệu suất cuộn - ngay cả khi được thực hiện trên một chuỗi nền. Chính xác tại sao điều này xảy ra tôi vẫn chưa chắc chắn. – rob
@rob là chính xác. Bạn có một hit đáng chú ý trong hiệu suất cuộn khi cố gắng để làm cho tất cả công việc này. Rob, bạn có bao giờ thực hiện bất kỳ tiến bộ nào về vấn đề này không? – user3344977
@ user3344977 Tôi thấy rằng tôi có thể giảm thiểu nhưng không khắc phục hiệu suất cuộn bằng cách đặt tất cả mọi thứ tôi có thể có thể vào chủ đề nền. (Phân bổ AVAsset một mình đã lên đến 30ms trên iPhone của tôi 6.) Tôi cũng đã làm một thử nghiệm mà tôi đã sử dụng một video tối thiểu <1k và được tải trên thiết bị, và điều đó không có sự khác biệt - nghĩa là giảm kích thước tệp video và tải từ đĩa không cải thiện hiệu suất cuộn. Có vẻ như không thể tránh khỏi ~ 15ms khóa của sợi chính khi bắt đầu một bộ phim. Tôi vẫn không biết nó là gì - thời gian profiling không được nhiều giúp đỡ. – rob