正如我在Windows 8 for .NET中所见,开发人员会话.NET处理平台的本机对象。这些对象支持指针计数器。对我来说很清楚,有些托管对象位于托管堆中,而且非托管,我们必须在finalize和dispose方法中释放它们。至于现在,我不清楚如何在Windows运行时处理内存管理。当我不得不担心托管/非托管资源时,你能给我一个建议吗?内存管理在Windows运行时如何工作以防止我的应用程序资源泄漏?
UPD:
我的意思是.NET Metro Profile
答案 0 :(得分:4)
底层的WinRT接口是基于COM的。每个WinRT接口都派生自IUnknown,其AddRef和Release方法实现了基于引用计数的内存管理。
然而,这很隐蔽,当您编写WinRT应用程序然后使用语言投影时。对于.NET和Javascript应用程序,语言投影分别内置于CLR和Chakra引擎中。哪个完全隐藏了实现细节,WinRT接口被映射到本机语言结构。包括巧妙地创建COM支持泛型和实现继承的错觉。一个有点合理的猜测是CLR投影使用已经内置在CLR中的COM互操作支持,但是不可能轻松地对其进行逆向工程。如果这完全准确,那么终结器可能会进行IUnknown :: Release()调用。
现在很难获得关于低级细节的正确信息,微软博客和SO海报没有说话,源代码不可用,触及这个主题的问题正在关闭,如{{3 }}
从Chen对这个问题的评论中可以看出,你不应该对此感到好奇。如果您担心,那么考虑使用C ++ / CX进行编程。哪个能很好地隐藏胶水。或者使用WRL库的原生C ++,但没有。两种运行时环境,其中内存管理是明确的微软投入了大量资源使C ++编程再次相关。