.net – Windows运行时中的内存管理

前端之家收集整理的这篇文章主要介绍了.net – Windows运行时中的内存管理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
正如我在 Windows 8 for .NET中看到的那样,.NET会话处理平台的本机对象.这些对象支持指针计数器.对我来说很清楚,有些托管对象位于托管堆中,而且非托管,我们必须在finalize和dispose方法中释放它们.至于现在,我不清楚如何在Windows运行时处理内存管理.当我不得不担心托管/非托管资源时,你能给我一个建议吗?内存管理在Windows运行时如何工作以防止我的应用程序资源泄漏?

UPD:

我的意思是.NET Metro Profile

解决方法

底层的WinRT接口是基于COM的.每个WinRT接口都来自IUnknown,其AddRef和Release方法实现了基于引用计数的内存管理.

但是,当您编写WinRT应用程序然后使用语言投影时,这是非常隐蔽的.对于.NET和Javascript应用程序,语言投影分别内置于CLR和Chakra引擎中.哪个完全隐藏了实现细节,WinRT接口被映射到本机语言结构.包括巧妙地创建COM支持泛型和实现继承的错觉.一个有点合理的猜测是CLR投影使用已经内置在CLR中的COM互操作支持,但是不可能轻松地对其进行逆向工程.如果这完全准确,那么终结器可能会进行IUnknown :: Release()调用.

现在很难得到关于低级细节的正确信息,微软博客和SO海报没有说话,源代码不可用,触及这个问题的问题正在关闭,如this one.

从Chen对这个问题的评论中可以看出,你不应该对此感到好奇.如果您担心,请考虑使用C/C++X进行编程.哪个能很好地隐藏胶水.或者使用WRL库的本地C,但没有.两种运行时环境,其中内存管理是明确的微软投入大量资源使C编程再次相关.

猜你在找的Windows相关文章