加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:28:10 所属栏目:Windows 来源:网络整理
导读:正如我在 Windows 8 for .NET中看到的那样,.NET会话处理平台的本机对象.这些对象支持指针计数器.对我来说很清楚,有些托管对象位于托管堆中,而且非托管,我们必须在finalize和dispose方法中释放它们.至于现在,我不清楚如何在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编程再次相关.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读