見出し画像

GTK+3のアプリよりもGTK4アプリのほうがメモリ使用量が多い話

こんばんは。なかのさんです。


私は最近、趣味で開発しているデスクトップアプリをGTK+3からGTK4に移植しています。

といってもGTKの移行作業はそこまで簡単な作業ではありません。今まで使い慣れていたコードがコンパイル/実行時エラーになったり。GTKのメジャーバージョン間はどうやら別物と考えたほうがよさそうです。

GTK4がリリースされてから1年以上は経過したものの、まだまだGTK4のデモコードや技術記事は少ない印象。日々苦戦しながら楽しみながらやっています。


さてそんな移行作業の途中、驚くことがありました。

タイトルにも書いたとおり、GTK+3のアプリよりもGTK4アプリのほうがメモリ使用量が多いのです。


テストのため、余計なコードのない、シンプルにウィンドウを表示するだけのプログラムを作ってみました。言語はValaです。

GTK+3版

public class SimpleWindow : Gtk.Application {
    protected override void activate () {
        var window = new Gtk.ApplicationWindow (this) {
            title = "A simple ApplicationWindow in GTK+3"
        };
        window.show_all ();
    }

    public static int main (string[] args) {
        return new SimpleWindow ().run ();
    }
}


GTK4版

public class SimpleWindow : Gtk.Application {
    protected override void activate () {
        var window = new Gtk.ApplicationWindow (this) {
            title = "A simple ApplicationWindow in GTK4"
        };
        window.present ();
    }

    public static int main (string[] args) {
        return new SimpleWindow ().run ();
    }
}

両者での違いは、ウィンドウを表示するための関数がshow_allからpresentに変わったのと、ウィンドウのタイトルの文字を変えてあるだけ。

これらをコンパイルして実行した結果が以下の通り。


GTK+3アプリのメモリ使用量
GTK4アプリのメモリ使用量

なんと、GTK+3でコンパイルしたアプリは9MBしかメモリを消費していないのに、GTK4だと58MB程度まで跳ね上がるのです。

実行環境はFedora Rawhide x86_64、GTK+3のバージョンは3.24.31、GTK4のバージョンは4.6.2。

私の環境のせいなのか、GTK4の宿命なのか……
もし後者であれば、マイナーバージョンアップで修正されることを祈ります。