1

我是否必须以及如何从已返回到托管 C# 项目的 Windows 运行时组件中创建的类中释放内存?

这个问题涉及类而不是结构,例如如何释放 c++ WinRT 值结构的内存

出现以下场景

  1. C++\Runtime 组件方法是从 C# 项目中提出的
  2. 创建 C++ 类(单个类和其他 C++ 类的集合)
  3. 返回 C++ 类
  4. C# 项目处理数据

我想确保以下类不会造成内存泄漏:https ://github.com/cmusphinx/pocketsphinx-wp-demo/blob/master/PocketSphinxRntComp/SpeechRecognizer.h#L32

我(仍然)是释放内存的新手,不知道如何以及何时释放它。任何人?

4

1 回答 1

1

所有ref类都是引用计数的,当没有更多的活动引用时将自动释放。因为 .NET 使用垃圾收集器,所以可能不会立即释放内存。

如果您的应用程序或库中有循环引用,那么对象的引用计数将永远不会达到零并且内存不会被回收(如果所有对象都被管理,.NET 可以处理循环引用,但如果它们来自外部则不能托管世界,就像你的 C++ 类)。

您的 C++ 代码是否存在内部内存泄漏是另一个问题。

于 2016-03-22T06:39:06.563 回答