19

¿WinRT tiene recolección de basura?¿WinRT tiene recolección de basura?

¿O hace el recuento de referencias como hace COM?

+1

Sí WinRT tiene algún tipo de recolección de basura, las preguntas más interesantes son de qué tipo es? (el recuento de referencias es un tipo válido de recolección de basura si está bien oculto para el programador como en VB6, en lugar de ATL) –

+0

* "¿WinRT tiene recolección de basura?" * - Sí. * "¿O hace referencia al conteo como lo hace COM?" * - Eso también es recolección de basura. Parece que [todos piensan en la recolección de basura de forma incorrecta] (https://blogs.msdn.microsoft.com/oldnewthing/20100809-00/?p=13203): * "La recolección de basura está ** simulando una computadora con un cantidad infinita de memoria ** [por] recuperar memoria que el programa no notaría desapareció. "* – IInspectable

Respuesta

23

He encontrado this article, que cita de Martyn Lovell Microsoft:

"objetos WinRT se cuentan como referencia COM para la gestión de memoria, con referencias débiles para evitar la circularidad."

Al parecer esto se mencionó en su charla sobre WinRT internos en el BUILD convention.

+8

Como nota al margen, aunque es un poco obvio, todavía vale la pena aclarar que una aplicación .NET que use WinRT todavía tendrá GC funcionando que manejará objetos .NET. Del mismo modo, JS tiene GC para sus propios objetos. Solo se refinancian los objetos WinRT. –

+0

En la parte inferior de .NET hay Win32 y COM que también se vuelven a contabilizar. Declarar que .NET se vuelve a contabilizar debido a esto sería tan cierto como afirmar que las aplicaciones Metro C++/CLI (-ish) se vuelven a contabilizar. – dalle

+4

@dalle No hay COM en la parte inferior de .NET, en un sentido que los objetos .NET no son objetos COM. Sin embargo, WinRT objetos _are_ objetos COM - implementan 'IUnknown'. Y, sí, en las aplicaciones de Metro C++ que usan la sintaxis del compilador nuevo/Zw, las instancias de los tipos 'ref class' _are_ refcounted, usando' AddRef'/'Release'. También lo son las cuerdas, aunque tienen sus propias funciones de recuento. Compila con '/ FAs' y compruébalo por ti mismo. –