Tenho problemas com vazamentos de memória, então fiz o seguinte código de teste.
#!/usr/bin/cjs
"use strict";
import Gtk from 'gi://Gtk?version=3.0';
Gtk.init (null);
const window= new Gtk.Window ();
let buttons=[], button, box=new Gtk.Box ({ orientation:1}), remove=true;
function construct_buttons ()
{
for (let i=0;i<500;i++)
{
button=new Gtk.Button ({label:"hello"});
box.add (button);
buttons.push (button);
}
}
setInterval (function ()
{
if (remove)
{
for (let i=0;i<500;i++) buttons[i].destroy ();
buttons=[], button=null;
}
else
{
construct_buttons ();
window.show_all ();
}
remove=!remove;
}, 2000);
construct_buttons ();
window.add(box);
window.set_title ("Test");
window.connect ('destroy', () => { Gtk.main_quit (); });
window.set_size_request (740, 600);
window.show_all ();
Gtk.main ();
Eu construo 500 botões e os adiciono a uma caixa. Após 2 segundos, eu os destruo com Gtk.widget.destroy() e libero o array de referência buttons=[], button=null, e após 2 segundos eu os construo novamente e assim por diante.
Fazendo isso por um tempo, minha memória cresceu de 17 MiB para mais de 50 MiB. Então parei. Não consigo descobrir o que estou fazendo errado. Tenho o mesmo problema com um aplicativo maior. Este é apenas um pequeno exemplo para teste.
Eu também tentei em vez de destruir. Gtk.widget.remove (widget), e deixei o cjs destruí-lo, mas aqui também a memória cresce.
Eu tenho o cjs versão 6.0.0