C#调用dll中的go函数,并且它在.Net Core中运行,go分配的非托管内存是否会被垃圾回收?

问题描述

我在Go中编写了一个文件传输接口,该接口接受本地路径和远程服务器信息,然后按块传输文件。情况是我想在C#中使用它,并且我知道Go可以内置到 C-Shared dll中,并可以通过P / Invoke在C#中调用。我想知道go分配的非托管内存是否将收集的垃圾?如果没有,是否有办法释放这部分内存?

解决方法

垃圾收集器不会了解Go代码的非托管内存。

如果要释放它,则应在Go代码中对其进行管理,或者至少准备要在C#中调用的函数并处理非托管内存。

我的建议是:

  • Go中释放内存的功能
  • 然后,当您要处置对象时,请使用C#调用此函数。