Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Windows运行时的内存管理_.net_Windows 8_Windows Runtime - Fatal编程技术网

.net Windows运行时的内存管理

.net Windows运行时的内存管理,.net,windows-8,windows-runtime,.net,Windows 8,Windows Runtime,正如我在Windows8 for.NET开发者会话中看到的那样,NET处理平台的本机对象。这些对象支持指针计数器。我很清楚,托管对象位于托管堆中,而非托管对象必须在finalize和dispose方法中释放。至于现在,我还不清楚如何在Windows运行时处理内存管理。当我不得不担心托管/非托管资源时,你能给我一个建议吗?为了防止我的应用程序资源泄漏,内存管理在Windows运行时是如何工作的 UPD: 我的意思是.NET Metro概要文件底层WinRT接口是基于COM的。每个WinRT接口都源

正如我在Windows8 for.NET开发者会话中看到的那样,NET处理平台的本机对象。这些对象支持指针计数器。我很清楚,托管对象位于托管堆中,而非托管对象必须在finalize和dispose方法中释放。至于现在,我还不清楚如何在Windows运行时处理内存管理。当我不得不担心托管/非托管资源时,你能给我一个建议吗?为了防止我的应用程序资源泄漏,内存管理在Windows运行时是如何工作的

UPD:


我的意思是.NET Metro概要文件

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

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

目前,很难获得关于底层细节的合理信息,微软的博客作者和海报都不在谈论,源代码不可用,涉及该主题的问题正在接近尾声,比如


从陈对这个问题的评论可以看出,你不应该对此感到好奇。如果你担心,那么考虑C++编程中的编程。这能很好地隐藏胶水。或者本地的C++与WRL库,而不是。内存管理是显式的两种运行时环境。微软投入了大量的资源,使C++编程再次相关。据我所知,C#是专为.NET设计的。地铁呢?这是否意味着如果我开始开发我的第一个地铁应用,我最好选择C++还是我不应该关心投影?Windows运行时是否存在已知的内存泄漏?我已经阅读了上面提到的线程,并没有得到关于最佳投影的强烈意见。似乎所有这些都有优点和缺点。WinRT编程的一个重要方面(在开发周期的后期出现)是,许多WinRT对象现在都支持ICloseable,这被预测为C#apps的IDisposable。这允许.Net和JS应用程序实现确定性终结。