Утечка памяти в GTK# + Cairo + Pango

Я использую Mono + GTK# + Cairo + Pango в Ubuntu 12.04 и обнаружил некоторые утечки памяти при использовании объекта Pango.Layout.

Я рисую какую-то анимацию с частотой кадров около 30 кадров в секунду, и моя память только увеличивается. Я удалил много кода, и вот что осталось:

void OnDraw(DrawingArea area)
{
    Cairo.Context context = Gdk.CairoHelper.Create(area.GdkWindow);

    using (var lay = Pango.CairoHelper.CreateLayout(context))
    {
        // Nothing.  
    }

    ((IDisposable) context.Target).Dispose();
    ((IDisposable) context).Dispose();
}

Без вызова Pango.CairoHelper.CreateLayout память остается стабильной, а с ним увеличивается примерно на 10к в секунду, что явно недопустимо.

Я что-то делаю не так? Готовы ли Mono + GTK# + Cairo + Pango к производству?

Mono version : 2.10.8.1-1ubuntu2.2
GTK# version : 2.12.10-2ubuntu4
Pango version : 1.30.0-0ubuntu3.1
uname : Linux ######-VirtualBox 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux

person gburri    schedule 11.09.2012    source источник


Ответы (1)


Насколько я знаю, в привязках Gtk# были некоторые исправления, которые еще не были выпущены.

Например, это исправление утечки памяти.

Так что на вашем месте я бы сначала попробовал gtk -sharp вышестоящая версия ветки 2.12. Если это не сработает, может быть, вы сами обнаружите утечку памяти и предложите исправление? Спасибо.

person knocte    schedule 11.09.2012
comment
Я нашел обходной путь, вызвав Pango.CairoHelper.CreateLayout только один раз, а затем вызывая Pango.CairoHelper.UpdateLayout каждый раз, когда я хочу нарисовать свою сцену. - person gburri; 12.09.2012