19

WinRT是否有垃圾收集?WinRT是否有垃圾收集?

還是它做COM引用計數?

+1

是WinRT有一些垃圾收集,更有趣的問題是什麼? (引用計數是一種有效的垃圾收集類型,如果它對於程序員來說很好隱藏,就像在VB6中那樣,而不是ATL) –

+0

*「WinRT是否有垃圾收集?」 - 是的。 *「或者它是否像COM一樣進行引用計數?」 - - 這也是垃圾收集。看來[大家都認爲垃圾回收是錯誤的](https://blogs.msdn.microsoft.com/oldnewthing/20100809-00/?p=13203):*「垃圾回收是**模擬計算機無限量的內存** [通過]回收程序不會注意到的內存丟失。「* – IInspectable

回答

23

我發現this article,其中列舉了微軟的Martyn Lovell:「WinRT的對象引用計數像COM的內存管理, 用弱引用,以避免圓」

顯然這是他在WinRT內部講話中提到的BUILD convention

+8

作爲一個側面說明,雖然它很明顯,但仍值得澄清的是,使用WinRT的.NET應用程序仍然會運行GC這將處理.NET對象。同樣,JS有自己的對象的GC。這只是WinRT對象的refcounted。 –

+0

在.NET的底部有Win32和COM,它們也被引用。由於這個原因,說明.NET會被反編譯,因爲這說明Metro C++/CLI(-ish)應用程序被反編譯。 – dalle

+4

@dalle .NET底部沒有COM,因爲.NET對象不是COM對象。但是,WinRT對象是COM對象 - 它們實現了'IUnknown'。而且,是的,在使用新的/ Zw編譯器語法的Metro C++應用程序中,使用'AddRef' /'Release'來refcounted'ref class'類型的實例。所以字符串,儘管他們有自己的refcounting功能。用'/ FAs'編譯並親自查看。 –