我正在从 gphoto2 中检索 JPEG,从数据中创建 Gio 流,然后从流中创建 Pixbuf:
import gphoto2 as gp
from gi.repository import Gio, GdkPixbuf
camera = gp.Camera()
context = gp.Context
camera.init(context)
file = gp.CameraFile()
camera.capture_preview(file, context)
data = memoryview(file.get_data_and_size())
stream = Gio.MemoryInputStream.new_from_data(data)
pixbuf = GtkPixbuf.Pixbuf.new_from_stream(stream)
# display pixbuf in GtkImage
执行此操作的函数使用 . 附加到 Gtk 空闲事件GLib.idle_add(...)
。它可以工作,但它会泄漏内存。进程的内存使用不断攀升。即使在构造 pixbuf 的行被注释掉时也会泄漏,但在构造流的行也被注释掉时不会泄漏,因此似乎是流本身正在泄漏。在构建 pixbuf 后添加stream.close()
没有帮助。
这里释放内存的正确方法是什么?