如何释放在C ++中分配的C#中的内存

合法邪恶

我有一个C ++ dll,它正在从相机读取视频帧。这些帧在通过指向调用者的指针(C#程序)返回的DLL中分配。

当C#处理完特定的视频帧后,需要对其进行清理。DLL接口和内存管理包装在C#中的一次性类中,因此更易于控制。但是,似乎内存没有被释放/释放。我的进程的内存占用量越来越大,不到一分钟,由于没有剩余的内存,我在C ++ DLL中遇到分配错误。

每个视频帧超过9 MB。有很多代码,所以我只提供分配/取消分配/类型/等。

首先:在C ++中为摄像机字节分配原始缓冲区。

dst = new unsigned char[mFrameLengthInBytes];

第二:以无符号字符*的形式从原始指针传回DLL边界,并转换为C#中的IntPtr

IntPtr pFrame = VideoSource_GetFrame(mCamera, ImageFormat.BAYER);
return new VideoFrame(pFrame, .... );

因此,现在将IntPtr传递到VideoFrame类的CTOR中。在CTOR内部,将IntPtr复制到该类的内部成员,如下所示:

IntPtr dataPtr;
public VideoFrame(IntPtr pDataToCopy, ...)
{
    ...
    this.dataPtr = pDataToCopy;
}

我的理解是,这是一个浅表副本,并且该类现在引用了原始数据缓冲区。框架已使用/已处理/等。稍后,处置VideoFrame类,并使用以下内容清理内存。

Marshal.FreeHGlobal(this.dataPtr);

我怀疑问题是... dataPtr是IntPtr,C#无法知道底层缓冲区实际上是9 MB,对吗?有没有办法告诉它此时释放多少内存?我使用了错误的C#免费方法吗?有专门针对这种情况的一种吗?

肖恩

您需要在使用的库中调用相应的“免费”方法。

通过分配的内存new是C ++运行时的一部分,调用FreeHGlobal将不起作用。您需要delete[]针对内存调用(一种方式或另一种方式)

如果这是您自己的库,则创建一个VideoSource_FreeFrame删除内存的函数(例如)。例如:

void VideoSource_FreeFrame(unsigned char *buffer)
{
  delete[] buffer;
}

然后从C#中调用它,并传入IntPtr您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 C++ dll 中分配内存,在 C# 中免费

来自分类Dev

PInvoke:在C ++中分配内存并在C#中释放它

来自分类Dev

C#Interop-释放在非托管代码中分配的内存

来自分类Dev

从 C# 代码访问在 C 代码中分配的结构内存

来自分类Dev

C ++:在函数中分配内存

来自分类Dev

如何释放在运行时组件中创建的c ++ WinRT类的内存

来自分类Dev

在循环中分配和释放内存(C + MPI)

来自分类Dev

在具有并行任务的Mono / C#中无法释放内存。如何解释分配?

来自分类Dev

如何在C ++ DLL中释放分配的内存

来自分类Dev

如何在C ++的递归函数中释放分配的内存

来自分类Dev

如何在C ++中释放已分配的内存?

来自分类Dev

C#中未分配变量的内存

来自分类Dev

在C中循环分配和释放内存

来自分类Dev

释放C中动态分配的内存

来自分类Dev

在C中释放已分配的内存

来自分类Dev

试图在C中分配内存功能?

来自分类Dev

我应该如何释放Rust中分配的C#byte []?

来自分类Dev

Linux C / C ++在动态库中分配/取消分配内存

来自分类Dev

导入kernel32函数以在C#中分配虚拟内存?

来自分类Dev

导入kernel32函数以在C#中分配虚拟内存?

来自分类Dev

如何将在C中分配的字符串返回给Ada并在Ada中释放它?

来自分类Dev

C内存分配和释放

来自分类Dev

如何从C中的char数组释放内存

来自分类Dev

如何释放内存到C中的指针

来自分类Dev

如何在C中分配多维数组所需的内存?

来自分类Dev

如何释放使用C ++“ new”运算符分配的C中的内存

来自分类Dev

如何释放SWIG中自定义构造方法中分配的内存?

来自分类Dev

在C99中的连续内存中分配两个全局数组

来自分类Dev

尝试在 C 中的向量中分配内存时出现奇怪的错误

Related 相关文章

热门标签

归档