19

WinRT dispone di Garbage Collection?WinRT ha Garbage Collection?

O fa il conteggio di riferimento come COM?

+1

Sì WinRT ha una sorta di Garbage Collection, le domande più interessanti sono di che tipo è? (il conteggio dei riferimenti è un tipo valido di Garbage Collection se è ben nascosto dal programmatore come in VB6, piuttosto che ATL) –

+0

* "WinRT ha Garbage Collection?" * - Sì. * "O fa riferimento al conteggio come COM?" * - Anche quello è garbage collection. Sembra che [tutti pensano alla raccolta dei rifiuti nel modo sbagliato] (https://blogs.msdn.microsoft.com/oldnewthing/20100809-00/?p=13203): * "La raccolta dei dati inutili è ** simulando un computer con un quantità infinita di memoria ** [by] che recupera memoria che il programma non noterebbe sparì. "* – IInspectable

risposta

23

ho trovato this article, che cita di Martyn Lovell Microsoft: "Gli oggetti sono WinRT riferimento contati come COM per la gestione della memoria, con riferimenti deboli per evitare circolarità"

A quanto pare questo è stato menzionato nel suo discorso sul interni WinRT al BUILD convention.

+8

Come nota a margine, mentre è abbastanza ovvio, vale comunque la pena di chiarire che un'app .NET che utilizza WinRT avrà ancora GC in esecuzione che gestirà gli oggetti .NET. Allo stesso modo, JS ha GC per i propri oggetti. Sono solo gli oggetti WinRT che vengono conteggiati. –

+0

Nella parte inferiore di .NET ci sono Win32 e COM che vengono anche conteggiati. Affermare che .NET viene reimpostato per questo sarebbe vero come affermare che le applicazioni Metro C++/CLI (-ish) vengono reimpostate. – dalle

+4

@dalle Non esiste alcuna COM in fondo a .NET, nel senso che gli oggetti .NET non sono oggetti COM. Tuttavia, gli oggetti WinRT _are_ COM - implementano 'IUnknown'. E, sì, nelle app Metro C++ che usano la nuova sintassi del compilatore/Zw, le istanze dei tipi 'ref class _are_ sono state rilevate, usando' AddRef'/'Release'. Così sono gli archi, sebbene abbiano le proprie funzioni di conteggio. Compilare con '/ FAs 'e vedere di persona. –