使用 python.net 在 C# 中嵌入 python 时的内存管理

Memory Management while embedding python in C# using python.net

我试图了解当使用 python.net 将 python 嵌入到 C# 中时如何管理内存。 Python 在 C# 中使用 py.GIL(全局解释器锁)执行,本质上 C# 调用 python 解释器并执行 python 代码。我不明白的是如何为 python 个对象分配和释放内存。

我在网上找不到任何内容,我们将不胜感激。

C# PyObject 持有一个 Python 对象句柄(指向 C 堆的指针)。在内部 Python 个对象计算对自身的引用。

在 C# 中,您可以通过调用 PyObject.Dispose 强制释放句柄,在这种情况下 Python 对象引用计数会立即减少,如果此时它达到 0,Python对象将被销毁和释放(从 C 堆)。

或者,等到 PyObject 个实例被 .NET 垃圾收集器收集。当发生这种情况时,Python 对象句柄被添加到一个内部队列中,当您创建新的 PyObjects 时,该队列会定期清空(例如 PyObject 构造函数将检查该队列,并释放所有把手放在里面)。

这适用于 Python.NET 2.5 和即将发布的 3.0。