gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:10:44 25 4
gpt4 key购买 nike

正如我在 Windows 8 for .NET 开发人员 session 中看到的,.NET 处理平台的 native 对象。这些对象支持指针计数器。对我来说很清楚,托管堆中存在托管对象,而我们必须在 Finalize 和 dispose 方法中释放它们。目前我还不清楚应该如何处理 Windows 运行时中的内存管理。当我不得不担心托管/非托管资源时,您能给我建议吗? Windows 运行时中的内存管理如何工作以防止我的应用程序资源泄漏?

更新:

我的意思是.NET Metro Profile

最佳答案

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

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

现在很难获得有关底层细节的可靠信息,微软博主和SO海报没有说话,源代码不可用,涉及该主题的问题正在关闭,例如this one .

从陈对这个问题的评论可以看出,你不应该对此感到好奇。如果您担心,请考虑使用 C++/CX 进行编程。这可以很好地隐藏胶水。或者带有 WRL 库的 native C++,但它没有。这两种运行时环境的内存管理都是显式的。 Microsoft 投入了大量资源以使 C++ 编程再次变得有意义。

关于.net - Windows 运行时中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12228602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com