前言

前几天利用python-mpv写了一个播放器,但是跑着跑着发现内存越来越大,经过我反复调试终于解决了这个问题。

解决思路

模块定位

首先我是一个模块一个模块测试的,这样可以尽快缩减出问题的代码范围,因为我一共就写了两个模块:播放列表模块播放器模块。所以我测试到出问题的模块还是很快的,定位到了是播放器模块出来问题,我发现只要播放器模块启动,那么内存泄漏,那么就可以确定是播放器模块内部代码有资源重复加载,没有释放。

进一步定位

我通过测试,音乐播放的时候,和停止播放的时候,这两种状态下,内存的变化情况,发现,无论是否在播放的条件下,内存都会泄漏,那么这一下子就可以缩小代码范围了,也就是当构造函数执行的时候,QTimer发射信号的槽函数内部出了问题,总与我定位到了具体出问题的代码:

def setIcon(widget,type_,size):
widget.setText(iconTextData[type_])
fontId = QFontDatabase.addApplicationFont("icon/iconfont.ttf")
font = QFontDatabase.applicationFontFamilies(fontId)[0]
font.setPixelSize(size)
font = QFont(msyh)
widget.setFont(font)

关键就在于QFontDatabase.addApplicationFont("icon/iconfont.ttf")这行代码,相当于每一次修改图标,都会添加一遍iconfont.ttf 所以才会造成内存泄漏

那么将其独立出来,让其在构造函数中只执行一次,修改为:

def loadFont():
fontId = QFontDatabase.addApplicationFont("icon/iconfont.ttf")
msyh = QFontDatabase.applicationFontFamilies(fontId)[0]
font = QFont(msyh)
return font def setIcon(widget,type_,size,font):
widget.setText(iconTextData[type_])
font.setPixelSize(size)
widget.setFont(font)

其他

python 中应该有类似的变量内存监测工具,但是我没找到好的工具,如果有知道的,还请各位大佬在评论中指出

记录一次PyQt5内存泄漏的问题解决的更多相关文章

  1. MFC 关于new出一个新对话框时,退出对话框内存泄漏的问题解决

    问题: 在进行点击按钮弹出对话框时,我是用了new来生成一个新的对话框,但是在新对话框关闭的时候,经过检查发现,新对话框存在内存泄漏问题. 原因: 因为使用了new,但是当时没有找到地方进行delet ...

  2. 了解 JavaScript 应用程序中的内存泄漏

    简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许多功能无需考虑内存管理 ...

  3. Vc 检测内存泄漏

    启用内存泄漏检测 检测内存泄漏是 C/c + + 调试器和 C 运行时库 (CRT) 的主要工具调试堆函数. 若要启用调试堆的所有函数,在 c + + 程序中,按以下顺序包含以下语句: C++复制 # ...

  4. JavaScript内存泄漏知多少?

    垃圾回收解放了我们,它让我们可将精力集中在应用程序逻辑(而不是内存管理)上.但是,垃圾收集并不神奇.了解它的工作原理,以及如何使它保留本应在很久以前释放的内存,就可以实现更快更可靠的应用程序.在本文中 ...

  5. 一次完整的JVM堆外内存泄漏故障排查记录

    前言 记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助. 在整个排查过程中,我也走了不少弯路,但是在文章中我 ...

  6. Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法

    Investigating Your RAM Usage In this document Interpreting Log Messages                 内存分析日志中各消息的含 ...

  7. springboot-23-aspectj日志记录及threadlocal内存泄漏

    对于请求参数的处理和响应, 如果在代码中体现日志会显得很繁琐, 普遍的解决方案是使用spring的切面方案去解决. 这儿使用的是springboot的切面: http://www.cnblogs.co ...

  8. linux中内存泄漏的检測(五)记录内存泄漏的代码

    到眼下为止,先后通过wrap malloc.new函数重载和计算指针内存大小的方法.基本上满足了对内存泄漏检測的须要. 假设发现了内存泄漏.那么就要找到内存泄漏的地方而且修正它了. 茫茫代码.如何去找 ...

  9. vue自定义指令导致的内存泄漏问题解决

    vue的自定义指令是一个比较容易引起内存泄漏的地方,原因就在于指令通常给元素绑定了事件,但是如果忘记了解绑,就会产生内存泄漏的问题. 看下面代码: directives: { scroll: { in ...

  10. Instruments的使用 逻辑查错,内存泄漏分析等工具集

    原创文章,转载请注明 XCode 开发后期,要对代码进行改进和优化,查内存泄漏是其中一项重要工作,今天下午偷了点时间,把前段时间的代码稍微整理了一下,顺带用了下这个工具,还真发现了些问题.这里记录一下 ...

随机推荐

  1. 践行初心|方正璞华爱心捐赠人脸识别测温系统WelComID

    近日,方正璞华向金鸡湖社区卫生服务中心捐赠了人脸识别测温系统.该设备集人员识别.体温检测等功能于一体,在人员进出的时候完成体温的检测,从而判断是否有异常人员等问题,有效节省人力成本.减少人员接触风险, ...

  2. 2022-9-5 JavaSE note

    Java SE 1.IDEA基本操作 psvm + 回车 : main() 方法声明 sout + 回车 : = System.out.println(); Ctrl + D : 把当前行复制到下一行 ...

  3. PHP获取当前周一、周末时间等(持续更新)

    获取周一和周日的日期 $week = date('w') == 0 ? 7 : date('w'); $Sunday = strtotime('today -' . ($week - 1) . 'da ...

  4. 阿里云下配置keepalive,利用HAVIP实现HA

    注:这篇文章参考网络,有些称呼都变了,比如阿里云上的现在是弹性ip 包括阿里云在内的很多云环境,因为不支持浮动IP广受诟病.目前阿里云在VPC网络下发布了HAVIP,能够实现arp宣告IP.这样也就让 ...

  5. 安装ceph (快速) 步骤一:预检

    官网地址:http://docs.ceph.org.cn/start/ 预检 安装一个 ceph-deploy 管理节点和一个三节点的Ceph 存储集群来研究 Ceph 的基本特性.这篇预检会帮你准备 ...

  6. Elasticsearch:使用 GeoIP 丰富来自内部专用 IP 地址

    转载自:https://blog.csdn.net/UbuntuTouch/article/details/108614271 对于公共 IP,可以创建表来指定 IP 属于哪个城市的特定范围.但是,互 ...

  7. 组件化开发3-cocoaPods私有库制作

    一.创建索引项目ZHMCSSpec 1-1 在代码托管网站上建立索引项目ZHMCSSpec(以这个名称为例) 1-2 在本地创建ZHMCSSpec,并与远程索引建立联系 pod repo add ZH ...

  8. Mysql 数据库SQL脚本导入

    1.进入mysql命令行窗口 mysql -uroot -p123456 2.展示所有数据库 show databases: 3.选择数据库 use 数据库名 4.展示选择的数据库中所有表 show ...

  9. Azure DevOps Pipelines部署.Net Core 应用到Kubernetes

    一.    先决条件 1.Azure Repos Git/Git和项目上传 把本地的Net Core项目上传至Azure Repos Git/Git 2.Docker Registry Service ...

  10. HTTPS实现原理分析

    概述 在上一节中介绍了两种加密方法 对称加密 非对称加密 其中对称加密性能高,但是有泄露密钥的风险,而非对称加密相反,加密性能较差,但是密钥不易泄露,那么能不能把他们进行一下结合呢? HTTPS采用混 ...