You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KivyMD动态创建销毁组件引发内存(RAM)持续上涨问题求助

概述

我正在开发一个大型KivyMD项目,包含多个展示各类信息的界面。最初把所有界面加载到单个KV文件中,导致加载时间过长,操作系统甚至会判定程序崩溃。

于是改为通过Python手动添加和删除组件,动态创建每个新Screen。加载时间有所改善,但发现每次添加并销毁一组组件后,系统内存(RAM)都会上涨。我编写了测试程序复现该问题,但无法确定原因。我的目标是能够随意创建和销毁组件而不导致内存上涨。

环境信息
  • KivyMD: 1.0.2
  • Kivy: 2.1.0
  • Python: 3.10.4
  • 系统:Ubuntu 22.04 及 Windows 10
已尝试方案

为此困扰数周仍未解决。尝试过使用gc.collect()手动清理不再被引用的内存,也尝试过用Python的del函数删除组件等方法。

我推测是某些对象持有这些组件的引用,导致clear_widgets()或remove_widget()仅将组件从界面移除,并未清除其引用。尝试用heapy/guppy追踪组件引用,但无法理解输出结果。也可能是我忽略了某些简单问题。

代码示例

运行以下代码,系统内存会持续上涨直至进程被终止:

from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivymd.uix.button import MDRectangleFlatButton
from kivymd.uix.label import MDLabel
from kivy.clock import Clock
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.textfield import MDTextField

counter = 0

class MainApp(MDApp):
        
    def build(self):
        #Add MDFloatLayout as root widget
        layout = MDFloatLayout()
        #Schedule add_items() function to be called every second 
        self.clock_obj = Clock.schedule_interval(self.add_items, 1)
        return layout
            
    def add_items(self, dt):
        #Increment global counter
        global counter
        counter += 1
        #Clear all widgets
        self.root.clear_widgets()
        label = MDLabel(text="Count " + str(counter), 
                        pos_hint={"x": 0.5, "top": 0.5}, size_hint=(.1, .1))
        button= MDRectangleFlatButton(text="Count " + str(counter),
                                      pos_hint={"x": 0.5, "top": 0.6}, 
                                      size_hint=(.1, .1))
        field = MDTextField(hint_text="Count " + str(counter), mode="fill", 
                            pos_hint={"x": 0.5, "top": 0.7},
                            size_hint=(.1, .1))
        #Add all widgets to parent layout
        self.root.add_widget(label)
        self.root.add_widget(button)
        self.root.add_widget(field)
        return

如需更多信息用于排查问题,请告知。提前感谢大家的帮助。

更新(2022年9月3日)

相关人员已在KivyMD Github上提交了Bug工单,目前排查工作仍在进行中。

内容的提问来源于stack exchange,提问作者brant18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:15:45