c# - Unity - Android,C# - C++ 内存泄漏

标签 c# android c++ unity3d memory-leaks

我目前正在开发一个在 Windows 和 Android 上运行的 Unity 项目。我基本上是使用 Unity WebCamTexture 类来访问连接的相机,然后将图像发送到我的 C++ 代码(Windows 上的 dll,Android 上的 dll),它与 opencv 一起工作以进行进一步处理。

虽然在 Windows 上一切正常,但完全相同的代码在 Android 上导致内存泄漏(RAM 使用量在每一帧上不断增加)。我已经寻找了几种关于如何与我的 C++ 代码共享图像的可能解决方案。每个解决方案在 Windows 上都可以正常工作,但在 Android 上会导致内存泄漏(图像处理在 Android 上也可以,只是泄漏是个问题)

这是一个工作代码示例:

C#

    Color32[] color = webcamTexture.GetPixels32();
    byte[] data = Color32ArrayToByteArray(color);
    IntPtr unmanagedArray = Marshal.AllocHGlobal(data.Length);
    Marshal.Copy(data, 0, unmanagedArray, data.Length);

    PrepareImage(unmanagedArray, camW, camH);

    Marshal.FreeHGlobal(unmanagedArray);

C++

    void PrepareImage(unsigned char* data,int w, int h){

    cv::Mat textureC4(h, w, CV_8UC4, data);

    cv::Mat textureC3;

    cv::cvtColor(textureC4,textureC3,cv::COLOR_RGBA2RGB);

    }

当我尝试对 C++ 部分中的“纹理”变量进行任何更改(例如从 4 个 channel 更改为 3 个)时,内存泄漏就开始了。

由于我没有使用 C++ 的经验,因此遇到此类问题我并不感到惊讶,但最让我困惑的是它在 Windows 上运行得非常好。如果有任何建议将我引向新的方向,我将很高兴。谢谢!

更新:

环境的更多细节:

统一版本:2018.2.8f1

测试的 NDK 版本:13b 和 16b

测试手机:1x Samsung S9, 2x Note 8

这些额外的解决方案也经过测试并给出相同的结果:

Link 1

Link 2

此外,我还尝试在 C++ 上创建指针,让 C# 使用该指针,最后让 C++ 清理内存。这仍然导致相同的泄漏。此时我想知道这是否是设置问题,所以我将创建新项目并稍后更新结果

...我现在创建了一个新的 Unity 项目,它只运行上面的代码 + 网络摄像头纹理。仍然是完全相同的行为。在这一点上,我怀疑它是我的 C++ 代码的 Android Studio 项目。

...我现在已经创建了一个 Visual Studio 项目来创建 .so 文件。即使是一个几乎空白的项目,内存仍然在泄漏。

最佳答案

最后还是Android Studio项目的问题。我在第三台计算机上创建了一个新项目。我复制了完全相同的代码。现在一切正常,没有泄漏。感谢所有帮助过我的人! :)

关于c# - Unity - Android,C# - C++ 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52829067/

相关文章:

c# - UrlReferrer 到底是什么意思?

c# - 枚举文件系统时删除或移动是否安全?

c++ - 是否可以在 C++ 中以零拷贝方式拼接缓冲区?

c++ - WinPcap 的链接器错误

c# - 使用 C# 以编程方式删除 "Include inheritable permissions from this object' s Parent"复选框

javascript - Jquery 与 Javascript 设置 html 隐藏 bool 字段

android - 更改 ListView 时,setEmptyView 不会更新

android - 如何检查我的自定义键盘是否已在设置中启用

android - 如何从 Java 中的原生 Android Activity 打开我的 React Native 应用程序的特定组件?

C++ 欧拉近似