为什么电脑突然加载不了gif文件?

为什么我编的录频程序那么费内存?
每到加载gif时就黑屏
代码如下:

if __name__=='__main__':
        from tkinter import messagebox as mess
        from tkinter.ttk import Button as Btt
        from tkinter import Tk
        from tkinter import Button as Btk
        from sys import exit as exit_
        import time
        from PIL import ImageGrab as g
        from pynput import keyboard as k
        from threading import Thread
        def save():
            print('save go')
            v[0].save('giffile.gif',format='gif',save_all=True,append_images=v[1:],duration=60)
        print('1')
        def quit():
            print('END')
            win.destroy()
            exit_()#退出程序
        print(2)
        def go():
            win.destroy()

            def quit_l(k):
                print(k)
                print('qui_l.go')
                if k==GJ_key.ctrl_l:
                    print('按下ctrl')
                    f_e=0
                    thsave.start()
            def go():
                print('Go!Go!Go!')
                while f_e!=0:
                    v.append(g.grab())
                    time.sleep(0.03)
            global v
            v=[]
            global f_e
            f_e=1
            f1=0
            global thsave
            global GJ_key
            GJ_key=k.Key
            thgo=Thread(target=go)
            thsave=Thread(target=save)
            pnl=k.Listener(on_press=quit_l)
            #当按下某键启动quit函数,松开某键启动puit_f函数
            pnl.start()#开始检测
            thgo.start()
        print(3)
        win=Tk()
        win.overrideredirect(True)
        win.resizable(0,0)
        win.geometry('200x100+0+0')
        Btk(win,text='退出',\
        bg='red',\
        fg='black',\
        width=5,\
        command=quit).pack(side='left',fill='y')
        Btt(win,text='开始',command=go).pack(side='left',fill='both')
        win.mainloop()




当按下ctrl键时停止录频并加载gif,为什么我的就是加载不出来?而且加载时内存占用变得非常高,不断上升,从20%到30%,50%,达到95%,我的电脑直接黑屏,我蒙了。以前还很流畅,windows报错说某东西损坏就加载不了了。是不是是我的程序问题?如是,请指出,谢谢。
(我截不了屏,当内存占用率达到将近100%时不可能截屏了,直接黑屏,所以无法提供图片)

基于Monster 组和GPT的调写:

  • 你的程序可能存在一些内存泄漏的问题,导致内存占用不断上升并最终导致程序崩溃。以下是一些可能引起内存泄漏的原因和建议的解决方法:
  • 没有正确地关闭打开的文件和资源。在程序结束前确保关闭所有已打开的文件和释放占用的资源,例如使用with语句来处理文件。
  • 没有及时删除不再需要的对象。对于不再需要的对象,可以使用del语句来手动删除它们。例如,在保存完所有帧后,可以手动删除v列表以释放占用的内存。
  • 可能存在循环引用的问题。如果对象之间存在循环引用,那么它们的引用计数永远不会达到零,因此它们的内存将不会被释放。你可以使用Python内置的gc模块来帮助诊断和解决这种问题。
  • 可能使用了一些会占用大量内存的数据结构或算法。例如,如果你使用了一个非常大的列表或字典,那么它将占用大量的内存。尽量避免使用这些大型数据结构或优化它们的使用。
  • 可能存在其他的性能问题或错误。你可以使用Python内置的profile或cProfile模块来分析程序的性能和瓶颈,并解决可能存在的问题。

这个程序之前在编译器运行的非常流畅,用pyinstaller打包后就不行了,现在即使使用编译器也不行,我没改过代码,是不是他的帧率太高,我设的是每0.03秒截一次屏,一秒截屏30多次,所以导致图片列表体积过大?但我每次只录屏了几秒,也就几百张图片,不至于占掉所有内存吧,我的电脑有将近20G内存呢