Comparaison de l'utilisation de la mémoire des différentes interfaces graphiques de la boîte à outils


Bonjour à tous! Notre équipe développe un IDE pour travailler avec l'API TestMace . Dans l'un de nos articles précédents, les lecteurs ont souligné la consommation de mémoire prohibitive des applications d'électrons. Eh bien, l'heure des chiffres est venue :) Dans cet article, l'auteur estime la consommation de mémoire des applications à fenêtre unique écrites à l'aide de différentes boîtes à outils. Bonne lecture!


Trouver l'ensemble parfait d'outils pour créer une interface graphique, j'ai décidé de mesurer la quantité de mémoire qu'ils occupaient.


En fait, je voulais savoir laquelle nécessitait le moins de mémoire pour un programme composé d'une fenêtre vide. Dans cet article, je parlerai des résultats.



Clause de non-responsabilité


Cet article fournit des informations sur la mémoire occupée par le programme lors de l'utilisation de divers outils, frameworks et bibliothèques pour créer des interfaces graphiques sous Linux. Toutes les mesures ont été effectuées sur le même ordinateur avec Ubuntu 19.04 (Disco Dingo) x86_64 à l'aide du programme Ksysguard, qui fournit des données sur la mémoire interne consommée par les applications. Je n'ai pas réinstallé le système spécifiquement pour le test. Il a été effectué sur mon Ubuntu omniprésent, sur lequel divers packages étaient déjà installés, ce qui pourrait affecter / déformer les résultats.


Pour certains outils, j'ai même ajouté des mesures obtenues sur Windows 10, qui peuvent difficilement être comparées à Linux, mais c'est intéressant à voir.


Je tiens à noter que mes mesures n'ont pas de valeur scientifique. En ayant d'autres données initiales, vous pouvez obtenir des résultats complètement différents.



Pas aussi simple qu'il y paraît


Alors, que devons-nous mesurer? Mémoire virtuelle (VSZ)? Mémoire résidente (RSS)? Propre RSS? RSS partagé?


En bref, alors ... je crois qu'en comparant deux programmes identiques développés à l'aide de différents ensembles d'outils, il sera plus précis de mesurer la quantité de processus de sa propre mémoire avec des smaps. Ksysguard utilise des smaps pour afficher des informations détaillées sur la mémoire. Cependant, dès le début, dans mon expérience, j'ai utilisé les données du panneau de consommation de RAM par défaut, et c'est seulement alors que j'ai pris conscience que les smaps donnaient des chiffres plus précis. Afin d'assurer la cohérence des données, j'ai utilisé les informations du panneau RAM par défaut pour tous les outils présentés dans la liste, bien que très probablement, en utilisant une interface avec une description détaillée de la consommation de mémoire, une situation similaire pourrait être observée.


Si plus en détail, alors ... dans cet article, je n'aurais pas eu assez de place pour des leçons sur la gestion de la mémoire sous Linux, et en plus, il y a déjà beaucoup de documents utiles sur ce sujet: ELC: Combien de mémoire les applications utilisent-elles vraiment? , Le système de fichiers / proc , proc - pseudo-système d'informations sur les processus , Présentation de la gestion de la mémoire Linux , Gestion de la mémoire


Liste des outils et de leurs indicateurs de mémoire


Pas un mot de plus. Voici mes résultats:


Boîte à outils GUIMémoire propre (Mo)Remarques
xcb0,132
xlib0,156
nuklear (rawfb)0,624n'augmente pas la mémoire consommée par Xorg
xforms0,765
WINAPI (Win10)1,00sur windows 10
dlib1.10
SDL2 (sans opengl)1.10
Gdk1,20
turbo vision1,30TUI
nana1,40
Motif1,50
Fltk1,70
Msegui2,04
Renard2,20
nuklear (x11)2,200,4 Mo + 1,8 Mo de mémoire Xorg
WINAPI (VIN)2,30
LCL (personnalisé)2,50
Gtk + 22,80
wxX113,00pas prêt à l'emploi en production
libui4.00
LCL (GTK)4,50
Gtk + 35,00
wxGtk36.00
Efl7.20
GLFW9.00
JUCE10.00Projucer binaire, la fenêtre n'est pas vide
Sciter10.00environ 10 Mo, Linux Scapp est manquant
LCUI11.00
GLUI12,50
SFML13.20
nanogui14 h
Sdl14 h
U ++14 h
Agar15 h
Cher ImGUI (SDL)15h30
Guilite15.80
Cher ImGUI (SDL / Vulkan)16,50
Mono WinForms16,564sur windows 10
Qt17 h
Ultralight20.00
rêverie23,50
Java swing59,30OpenJDK 12
électron74,60
Javafx80,00OpenJDK 12
horus_ui94,00
Bureau Flutter98,00upd: aux premiers stades de développement!
Boost.UI-utilise wxWidgets
CEGUI-Comment le collecter? :(?
IUP-similaire à wxWdigets, utilise gtk + sous Linux
Lgi-utilise gtk + 2
Minigui-échec de l'assemblage
morda-échec de l'assemblage
SFGUI-utilise SFML
TGUI-utilise SFML
Verdigris-utilise qt


J'ai été surpris par la gourmandise de Flutter, étant donné qu'il a été initialement conçu comme un cadre pour créer une interface graphique pour les appareils mobiles.

UPD (mes remerciements à kirbyfan64sos ): Flutter Desktop en est encore aux premiers stades de développement, et toutes les versions sont en train de déboguer. Cela signifie que tous les profileurs (comme Observatoire) sont actifs, toutes les instructions de débogage sont activées et le compilateur AoT est désactivé. Il sera intéressant de revérifier les données à l'aide de la version Release.


Je ne dirai pas que j'ai été frappé par la performance d'Electron.


Avec HorusUI, je m'attendais à un chiffre approximatif de 20 Mo, car il utilise OpenGL et le mode de rendu immédiat de l'interface graphique. Je ne comprends pas pourquoi le chiffre est sorti plus.


Les frameworks Java Swing et JavaFX ont également montré des résultats intéressants. Les deux sont extrêmement insatiables, et si vous n'êtes pas sûr de celui qui conviendrait à votre nouveau projet Java, il semble raisonnable d'opter pour le cadre JavaFX plus pratique et moderne, bien que vous deviez le remplir avec un peu plus de mémoire. Mais si votre mémoire vaut son pesant d'or, alors, bien sûr, choisissez Swing.


Qt a également montré des chiffres très intéressants et s'est avéré beaucoup plus vorace que la plupart des autres outils populaires. Il convient de noter que la majeure partie de la mémoire occupée est la quantité consommée par le pilote amdgpu installé sur mon système. C'est peut-être parce que les tampons OpenGL sont stockés localement. La même chose peut être observée avec SDL2: un programme sans OpenGL consomme 1,1 Mo, et avec lui jusqu'à 14 Mo.


WxWidgets et LCL sont bien placés dans cette comparaison. Malgré le fait qu'ils sont des wrappers sur d'autres outils pour l'interface graphique, le coût des ressources est minime. Je suis impressionné par l'idée de la possibilité de transférer le backend de Gtk +, par exemple, vers Qt, garantissant ainsi l'indépendance des outils.


Je vais également mettre en évidence Nuklear, simplement parce que, il me semble, il a un mode de rendu immédiat très sympa. Si vous n'êtes pas dérouté par l'utilisation du framebuffer X11 brut, votre application à fenêtre unique n'occupera que 0,624 Mo, ce qui semble très impressionnant.


Conclusion


Si vous espériez voir des conclusions générales ici, alors, je le crains, je dois vous décevoir.

Source: https://habr.com/ru/post/fr464327/


All Articles