2013-04-09 40 views
6

Xamarin.iOS làm gì về quản lý bộ nhớ? Với IL thông thường, chúng ta có Garbage Collector, nó sẽ xử lý các đối tượng không được sử dụng và các lập trình viên từ chối xóa. Điều này hoạt động như thế nào khi Xamarin biên dịch mã thành native? Ai làm sạch các vật không được sử dụng nữa?Xamarin.iOS nào có chức năng quản lý bộ nhớ khi biên dịch C# thành mã gốc?

Câu hỏi này trả lời biên soạn tác phẩm như thế nào nhưng không giải thích được phần quản lý bộ nhớ: How MonoTouch works?

Trả lời

6

Các answer you seek đã được đưa ra về vấn đề bạn được liên kết.

Để tóm tắt, quá trình dịch gốc IL-to-native được thực hiện trước thời hạn, nhưng vẫn còn các phần khác của thời gian chạy Mono. Việc biên dịch JIT chỉ là một trong những nhiệm vụ được thực hiện bởi thời gian chạy và phần đặc biệt này không tương thích với các hạn chế bộ nhớ của iOS (các trang bộ nhớ có thể ghi cũng không thể thực thi được, và điều này là bắt buộc đối với một JIT hoạt động). Đây là, AFAIK, lý do duy nhất tại sao biên dịch trước (AOT) là bắt buộc.

Trình thu gom rác Mono thực sự chạy trên iOS, nó chỉ được nhúng vào nhị phân được tạo bởi trình biên dịch Monotouch. Mã nhị phân được tạo ra chứa mã ứng dụng được biên dịch AOT của bạn cũng như các phiên bản được biên dịch AOT của các thư viện bạn sử dụng, và phiên bản rút gọn của thời gian chạy Mono.

+0

Cảm ơn. Bằng cách nào đó tôi đã không thể trích xuất kết luận này từ câu hỏi được liên kết. Điều đó có nghĩa là do có nhiều mã được thực thi hơn và bộ thu gom rác hoạt động song song với ứng dụng Xamarin.iOS về kỹ thuật thì ứng dụng chậm hơn là bản địa (viết bằng Obj-C)? Sự khác biệt lớn? – vladimir

+0

@vladimir Đó là vì câu trả lời được chấp nhận có * sai. * – cdhowie

+0

@vladimir Slower? Có lẽ. Chậm hơn đủ để người dùng nhận thấy? Tất cả phụ thuộc vào những gì ứng dụng đang làm. – cdhowie

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