gpt4 book ai didi

c# - 如何避免通过pythonnet在python中显式调用IDisposable对象上的Dispose方法?

转载 作者:行者123 更新时间:2023-12-01 07:25:45 24 4
gpt4 key购买 nike

最近,我用 C# 开发了动态对象(一个小型​​库),我可以将其链接到我的 python 应用程序(如果不正确,请原谅我的命名法)。我有一些 IDisposable 对象,它在构造函数中打开文件,然后在 Dispose() 方法中关闭它。文件需要在对象的整个生命周期中保持打开状态。

我希望在最后一次实时引用后自动调用 Dispose() 方法,但我必须显式调用它。

  • Python 3.7.3
  • Ubuntu 18.04.2
  • pythonnet 2.4.0
  • 单声道 5.18.1.28
import clr
clr.AddReference("MyLibrary")
from MyLibrary import DynamicObject

然后在我的代码中进一步使用它:

def foo():
my_obj = DynamicObject()
...
my_obj().Dispose() # have to call it here
return

此外,终结器也没有被调用。有没有办法使用终结器或 Dispose() 方法而不显式调用它们,或者 CLR 的垃圾收集器不知道我的 python 脚本中发生了什么? python如何通过python.net进行通信?

谢谢你:-)

最佳答案

Dispose 不会自动调用。它的存在使得任何使用该类的人都可以在需要时使用它来处理非托管资源。终结器自动被调用,但这将在垃圾收集器决定执行此操作时进行,而不是在实例超出范围后立即调用。

如果您想更轻松地管理 Dispose 调用,您可以查看 using statement ,由 with in Python 支持.

关于c# - 如何避免通过pythonnet在python中显式调用IDisposable对象上的Dispose方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57459412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com