Android内存溢出:tkinter上的内存溢出 ()崩溃

我正在为自己制作一个游戏。我坚持的问题是,由于某种原因,程序在将一些对象放在画布上并删除它们后崩溃。更深入:

我有一个画布的框架FrameMain

我有一个画布的框架FrameLower

我用FrameMain.__placeFrames()方法在FrameMain画布上放置和删除几个FrameLower作为FrameMain.obj

问题是,当我删除FrameMain.obj时,似乎某个地方的内存没有被完全清除,所以它会导致程序在一段时间后崩溃,这取决于多少次FrameLower被放置以及它在画布上有多少图像。

我有足够的空闲 RAM,你可以,~6GB,所以这不是问题。

我真正想理解的是,如果有可用的内存来存储对象,为什么这些对象没有被完全删除,为什么它会崩溃。

我真正想做的是摆脱这种崩溃在的简化示例中,我放置了 10000 帧,但是在真实程序中,其中 100 帧足以杀死我的游戏-它们充满了图像。

(对于此代码按原样工作,需要根目录中的任何img.gif文件)

from tkinter import *
class FrameMain(Frame):
    def __init__(self,master):
        super().__init__(master,height=100,width=100,bg='black')
        self.grid()
        self.canvas=Canvas(self,height=100,width=100,bg='white')
        self.canvas.grid()
        self.__placeFrames(10000)
    def __placeFrames(self,number):
        for counter in range(0,number):
            self.obj=self.canvas.create_window(50,50,window=FrameLower(self.canvas))
            self.canvas.delete(self.obj)
            del self.obj
class FrameLower(Frame):
    def __init__(self,master):
        super().__init__(master,height=50,width=50,bg='red')
        self.canvas=Canvas(self,height=50,width=50,bg='blue')
        self.canvas.grid()
        self.img=PhotoImage(file='img.gif')
        self.canvas.create_image(0,0,image=self.img)
def Run():
    root=Tk()
    frameMain=FrameMain(root)
    root.mainloop()
Run()
0

当你做self.canvas.delete(self.obj)时,你所做的只是从画布中删除对象。与该对象关联的框架不会被销毁。如果你想销毁窗口对象,你需要在它上面显式调用destroy

在创建成千上万的项目时,画布也有一些已知的限制。它不会回收画布项目 ID,因此即使画布对象本身已被删除,它们也会继续占用少量内存。一种解决方案是不删除画布项目,而是将其移出屏幕或将其配置为在不需要时隐藏,然后重新配置它们而不是创建新项目。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(685)
Iphone5屏幕大小:如何拍摄iPhone5应用程序的屏幕截图
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(44条)