19

WinRT có Bộ sưu tập rác không?WinRT có bộ sưu tập rác không?

Hoặc tính toán tham chiếu cũng như tính năng COM?

+1

Có WinRT có một số loại Bộ sưu tập rác, câu hỏi thú vị hơn là loại nào? (tham chiếu đếm là một loại hợp lệ của bộ sưu tập rác nếu nó cũng được ẩn từ các lập trình viên như trong VB6, thay vì sau đó ATL) –

+0

* "Liệu WinRT có bộ sưu tập rác?" * - Có. * "Hay nó có tính toán tham chiếu như COM không?" * - Đó cũng là bộ sưu tập rác. Dường như [mọi người đều nghĩ về việc thu gom rác theo cách sai] (https://blogs.msdn.microsoft.com/oldnewthing/20100809-00/?p=13203): * "Bộ sưu tập rác là ** mô phỏng một máy tính với một Số lượng bộ nhớ vô hạn ** [bởi] đòi lại bộ nhớ mà chương trình sẽ không nhận thấy bị mất. "* – IInspectable

Trả lời

23

tôi thấy this article, mà trích dẫn của Martyn Lovell Microsoft: "WinRT đối tượng được tham khảo tính như COM cho quản lý bộ nhớ, với sự tham khảo yếu để tránh giấy cáo bạch"

Dường như điều này đã được đề cập trong bài nói chuyện của ông về nội bộ WinRT tại số BUILD convention.

+8

Như một lưu ý phụ, trong khi nó rõ ràng, nó vẫn còn giá trị làm rõ rằng một ứng dụng .NET bằng cách sử dụng WinRT vẫn sẽ có GC chạy sẽ xử lý các đối tượng .NET. Tương tự, JS có GC cho các đối tượng riêng của nó. Nó chỉ là các đối tượng WinRT được nạp lại. –

+0

Ở dưới cùng của .NET có Win32 và COM cũng được nạp lại. Nói rằng .NET được nạp lại vì điều này sẽ đúng như nêu rõ rằng các ứng dụng Metro C++/CLI (-ish) được nạp lại. – dalle

+4

@dalle Không có COM ở cuối .NET, theo nghĩa là đối tượng .NET không phải là đối tượng COM. Tuy nhiên, đối tượng WinRT _are_ COM objects - chúng thực thi 'IUnknown'. Và, vâng, trong các ứng dụng Metro C++ sử dụng cú pháp trình biên dịch/Zw mới, các thể hiện của 'loại ref' được _are_ refcounted, sử dụng 'AddRef' /' Release'. Vì vậy, là các chuỗi, mặc dù chúng có chức năng đếm ngược riêng của chúng. Biên dịch với '/ FA' và xem cho chính mình. –