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'编译并亲自查看。 –