Почему OpenCV Mat создает утечки памяти? - PullRequest
0 голосов
/ 28 января 2019

Не уверен, что это уместно, но я использую opencv4nodejs для своего проекта, и я действительно работал в такой ситуации, когда, если я не вызываю .release() для каждого объекта Mat, потребление памяти возрастает ~10 МБ / с.

Этот простой пример кода решит проблему.

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?

1 Ответ

0 голосов
/ 31 января 2019

Это потому, что вы используете recursion.В конце функции вы снова вызываете loop, чтобы она складывала новые экземпляры этих Mat в каждую рекурсию.Объекты mat и grey_mat никогда не уничтожаются, как если бы вы вернулись из функции.

Если вы измените цикл на что-то iterative, вы больше не столкнетесь с проблемой, поскольку функция возвращается каждый рази коврики уничтожены.

function doLoopWork(camera, display)
{
    let mat = camera.read();

    let grey_mat = mat.bgrToGray();
}

function loop(camera, display) 
{
    while (1) {
      doLoopWork(camera, display);
   }
}
...