为什么 OpenCV Mat 会造成内存泄漏?
Why OpenCV Mat creates memory leaks?
不确定这是否相关,但我正在为我的项目使用 opencv4nodejs
,并且在这种情况下我做了 运行,如果我不调用 .release()
每个 Mat 对象,内存消耗增加 ~10MB/s。
这个简单的示例代码将解决问题。
function loop(camera, display)
{
let mat = camera.read();
let grey_mat = mat.bgrToGray();
loop(camera, display);
}
因为,这个解决了问题:
function loop(camera, display)
{
let mat = camera.read();
let grey_mat = mat.bgrToGray();
grey_mat.release();
mat.release();
loop(camera, display);
}
如果我搜索 OpenCV Mat 对象导致泄漏的原因,我会得到答案,人们说 Mat 能够自行处理内存使用。
如果最后一句话是真的,那我做错了什么?如果我没有做错任何事,为什么我必须明确告诉 Mat 对象释放它的内存?或者,npm 模块 opencv4nodejs
本身是否存在潜在问题?
那是因为您正在使用 recursion
。在函数的末尾,您再次调用 loop
以便它在每次递归时堆叠这些 Mat
的新实例。对象 mat 和 grey_mat 永远不会被销毁,如果你要从函数 tough.return 中销毁它们。
如果您更改某些东西的循环 iterative
您应该不会再遇到这个问题,因为函数 return 每次都会被破坏。
function doLoopWork(camera, display)
{
let mat = camera.read();
let grey_mat = mat.bgrToGray();
}
function loop(camera, display)
{
while (1) {
doLoopWork(camera, display);
}
}
不确定这是否相关,但我正在为我的项目使用 opencv4nodejs
,并且在这种情况下我做了 运行,如果我不调用 .release()
每个 Mat 对象,内存消耗增加 ~10MB/s。
这个简单的示例代码将解决问题。
function loop(camera, display)
{
let mat = camera.read();
let grey_mat = mat.bgrToGray();
loop(camera, display);
}
因为,这个解决了问题:
function loop(camera, display)
{
let mat = camera.read();
let grey_mat = mat.bgrToGray();
grey_mat.release();
mat.release();
loop(camera, display);
}
如果我搜索 OpenCV Mat 对象导致泄漏的原因,我会得到答案,人们说 Mat 能够自行处理内存使用。
如果最后一句话是真的,那我做错了什么?如果我没有做错任何事,为什么我必须明确告诉 Mat 对象释放它的内存?或者,npm 模块 opencv4nodejs
本身是否存在潜在问题?
那是因为您正在使用 recursion
。在函数的末尾,您再次调用 loop
以便它在每次递归时堆叠这些 Mat
的新实例。对象 mat 和 grey_mat 永远不会被销毁,如果你要从函数 tough.return 中销毁它们。
如果您更改某些东西的循环 iterative
您应该不会再遇到这个问题,因为函数 return 每次都会被破坏。
function doLoopWork(camera, display)
{
let mat = camera.read();
let grey_mat = mat.bgrToGray();
}
function loop(camera, display)
{
while (1) {
doLoopWork(camera, display);
}
}