autojs之内存泄露
内存泄漏的概念
百度百科:
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
autojs版本
autojs官方文档自带示例
// autojs官网: https://pro.autojs.org/docs/#/zh-cn/debug
$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();for (let i = 0; i < 10; i++) {// 这个图片本应手动调用recycle回收let leak = captureScreen().clone();// 我们故意注释掉回收的代码// leak.recycle();
}
autojs开发者定的规矩
图片相关代码
除了截图不用主动回收图片,
其他图片处理, 一律必须主动回收
img.recycle();
截图不会内存泄露
$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();for (let i = 0; i < 10; i++) {img = captureScreen();sleep(10);img = captureScreen();sleep(10);img = captureScreen();sleep(10);img = captureScreen();
}
找色不会内存泄露
$debug.setMemoryLeakDetectionEnabled(true);
if (!requestScreenCapture()) {toast("请求截图失败");exit();
}
var img = captureScreen();
toastLog("开始找色");
//指定在位置(100, 220)宽高为400*400的区域找色。
//#75438a是编辑器默认主题的棕红色字体(数字)颜色,位置大约在第5行的"2000",坐标大约为(283, 465)
var point = findColorInRegion(img, "#75438a", 90, 220, 900, 1000);
if (point) {toastLog("x = " + point.x + ", y = " + point.y);
} else {toastLog("没有找到");
}
找图, 会内存泄露
$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();var bigImg = captureScreen();
var smallImg = images.clip(bigImg, 10, 10, 200, 200);
var point = findImage(bigImg, smallImg);
toastLog(point);
// 不主动回收, 就会内存泄露
// bigImg.recycle();
// smallImg.recycle();
灰度化图片, 会内存泄露
$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();var img = captureScreen();
let grayImg = images.grayscale(img); // 灰度化图片
// 不主动回收, 就会内存泄露
// grayImg.recycle();
嵌套函数处理图片, 会内存泄露
$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();let img = captureScreen();
let thresholdImg = images.threshold(images.grayscale(img), 100, 200);
// 有两张图片, 你只回收了一张
thresholdImg.recycle();
正确的做法: 不要嵌套函数处理图片
$debug.setMemoryLeakDetectionEnabled(true);
requestScreenCapture();let img = captureScreen();
let grayscaleImg = images.grayscale(img);
let thresholdImg = images.threshold(grayscaleImg, 100, 200);
grayscaleImg.recycle();
thresholdImg.recycle();
微信公众号 AutoJsPro教程
QQ群
747748653
autojs之内存泄露相关推荐
- Android中出现内存泄露的原因
短生命周期的对象持有了长生命周期的对象,使得短生命周期对象驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再被使用,无法释放这些内存. 以下会造成内存泄露: a.数据库的cursor没有 ...
- Linux下正确使用getifaddrs()函数避免内存泄露
工作中使用valgrind检测内存泄露时,发现getifaddrs()很容易导致内存泄露,下面是正确的代码: //get local ip of network card //gcc -g get_a ...
- 使用valgrind检测ATS插件中的内存泄露
一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库 ...
- 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露
valgrind官网:http://valgrind.org/ 1.安装方法 第一种方式:下载目前最新的源码,编译安装,在服务器上推荐这种方式 wget http://valgrind.org/dow ...
- ATS插件开发中内存泄露问题的解决方法探讨
接触ATS开发已经有几年了,开发过内核的模块,也从事过插件的开发.内存泄露问题一直是一个困扰大多数ATS开发者的头疼的问题,下面说说我自己的感受和思考.这里这关注ATS插件开发这个话题.源码的exam ...
- 通过define _CRTDBG_MAP_ALLOC宏来检测windows上的code是否有内存泄露
VS中自带了内存泄露检测工具,若要启用内存泄露检测,则在程序中包括以下语句: #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> 它们的先后顺序不能 ...
- Ubuntu下内存泄露检测工具Valgrind的使用
在VS中可以用VLD检测是否有内存泄露,可以参考http://blog.csdn.net/fengbingchun/article/details/44195959,下面介绍下Ubuntu中内存泄露检 ...
- OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
转自:http://apps.hi.baidu.com/share/detail/30893646 在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若 ...
- python会不会出现内存泄露_Python内存泄漏和内存溢出的解决方案
一.内存泄漏 像Java程序一样,虽然Python本身也有垃圾回收的功能,但是同样也会产生内存泄漏的问题. 对于一个用 python 实现的,长期运行的后台服务进程来说,如果内存持续增长,那么很可能是 ...
最新文章
- 主题:CS0016: 未能写入输出文件“c:#92;WINDOWS#92;Microsoft.NET#92;***.dll”错误处理...
- Android中的多线程(字节跳动)
- 服务器系统ghost版 raid,服务器在raid5下做系统ghost备份.docx
- linux系统如何使用fork函数创建子进程
- 第六节:又一种新的数据类型:元组Tuple
- Python中的具名元组类用法
- js 内置对象的方法
- 《MATLAB R2012a超级学习手册》一第1章 MATLAB概述
- Java添加过期注解
- Python numpy 中 keepdims 的含义
- 2021年2 分以上优秀护理相关SCI 期刊汇总
- MAC电脑新手入门指南
- VS报错:当前页面的脚本发生错误
- 行列式与矩阵的初等变换总结
- 【MQTT】SpringBoot集成MQTT
- unicloud云开发---uniapp云开发(一)---服务空间创建以及部署一个云函数
- 分享:制作属于自己的O'REILLY“动物书”封面
- 宝塔使用心得--快速部署javaweb应用
- Android图片转换
- Linux 中 find 命令如何使用,附 35 个实际例子