我解决了。
首先,GPU 上分配的内存并不是我性能问题的原因。但是,glumpy 可以通过内置GLObject.deactivate()
方法“释放”GPU 内存。(我必须自己在 label-renderer agg-glyph-collection上编写 deactivate() 方法。
每个 GLObject 都有这个方法,对我来说 gloo.Program.deactivate() 方法通过将绑定缓冲区的大小设置为 0 来解决它。
我的问题是由课堂引起_event_stack
的app.window.event
。你可以修改_event.stack
byattach(event_handler)
和remove_handlers(handler)
method。如果您删除(着色器)程序,则 event_handlers 不会自动分离。
它是一个事件堆栈,但也有层(dicts),该remove_handlers
方法将找到附加给定处理程序之一的第一层(帧)并删除任何给定处理程序的所有出现但仅在此层/帧中。
因此,出于我的目的,解决方案是分别分离我的所有程序。
self.program_points.deactivate()
self.skip_plane_program.deactivate()
self.axes_program.deactivate()
self.labels_graph_program.deactivate()
self.labels_axis_program.deactivate()
# this is necessary because glumpy breaks symmetry between push and pop on event_stack
window.remove_handlers(self.program_points['transform'])
window.remove_handlers(self.axes_program['transform'])
window.remove_handlers(self.labels_graph_program['transform'])
window.remove_handlers(self.skip_plane_program['transform'])
window.remove_handlers(self.labels_axis_program['transform'])
这不能按预期工作:
window.remove_handlers(self.program_points['transform'], self.axes_program['transform'], self.labels_graph_program['transform'], self.labels_axis_program['transform'])