Perbandingan penggunaan memori GUI toolkit berbeda


Halo semuanya! Tim kami sedang mengembangkan IDE untuk bekerja dengan API TestMace . Dalam salah satu artikel kami sebelumnya, pembaca menunjukkan konsumsi memori aplikasi elektron yang sangat tinggi. Nah, waktu angka telah tiba :) Pada artikel ini, penulis memperkirakan konsumsi memori aplikasi satu-jendela yang ditulis menggunakan berbagai toolkit. Selamat membaca!


Menemukan seperangkat alat yang sempurna untuk membuat GUI, saya memutuskan untuk mengukur jumlah memori yang digunakan.


Bahkan, saya ingin mencari tahu mana yang membutuhkan jumlah memori paling sedikit untuk program yang terdiri dari satu jendela kosong. Pada artikel ini saya akan berbicara tentang hasilnya.



Penafian


Artikel ini memberikan informasi tentang memori yang ditempati oleh program saat menggunakan berbagai alat, kerangka kerja dan perpustakaan untuk membuat GUI di Linux. Semua pengukuran dilakukan pada komputer yang sama dengan Ubuntu 19.04 (Disco Dingo) x86_64 menggunakan program Ksysguard, yang menyediakan data pada memori internal yang dikonsumsi oleh aplikasi. Saya tidak menginstal ulang sistem secara khusus untuk pengujian. Itu dilakukan di Ubuntu saya di mana-mana, di mana berbagai paket sudah diinstal, yang dapat mempengaruhi / mengubah hasil.


Untuk beberapa alat, saya bahkan menambahkan pengukuran yang diperoleh pada Windows 10, yang hampir tidak dapat dibandingkan dengan Linux, tetapi menarik untuk dilihat.


Saya ingin mencatat bahwa pengukuran saya tidak memiliki nilai ilmiah. Memiliki data awal lainnya, Anda bisa mendapatkan hasil yang sama sekali berbeda.



Tidak semudah kedengarannya


Jadi apa yang perlu kita ukur? Memori virtual (VSZ)? Memori penduduk (RSS)? RSS sendiri? RSS yang dibagikan?


Singkatnya, kemudian ... Saya percaya bahwa ketika membandingkan dua program identik yang dikembangkan menggunakan set alat yang berbeda, akan lebih akurat untuk mengukur jumlah proses ingatannya sendiri dengan tamparan. Ksysguard menggunakan tamparan untuk menampilkan informasi memori terperinci. Namun, sejak awal, dalam percobaan saya, saya menggunakan data dari panel konsumsi RAM secara default, dan baru kemudian saya menyadari bahwa smaps memberikan angka yang lebih akurat. Untuk memastikan konsistensi data, saya menggunakan informasi dari panel RAM default untuk semua alat yang disajikan dalam daftar, meskipun, kemungkinan besar, menggunakan antarmuka dengan deskripsi rinci tentang konsumsi memori, situasi serupa dapat dilihat.


Jika lebih detail, maka ... dalam artikel ini saya tidak akan memiliki cukup ruang untuk pelajaran tentang manajemen memori di Linux, dan selain itu, sudah ada banyak materi yang layak tentang hal ini: ELC: Berapa banyak memori yang benar-benar digunakan aplikasi? , The / proc Filesystem , proc - memproses informasi pseudo-filesystem , Linux Memory Management Overview , Memory Management


Daftar alat dan indikator ingatannya


Tidak sepatah kata pun. Inilah hasil saya:


Toolkit GUIMemori sendiri (MB)Komentar
xcb0,132
xlib0,156
nuklear (rawfb)0,624tidak meningkatkan konsumsi memori Xorg
xforms0,765
WINAPI (Win10)1,00di windows 10
dlib1.10
SDL2 (tanpa opengl)1.10
Gdk1.20
visi turbo1.30TUI
nana1.40
Motif1,50
Fltk1.70
Msegui2.04
Rubah2.20
nuklear (x11)2.200,4 MB + 1,8 MB memori Xorg
WINAPI (WINE)2.30
LCL (customdrawn)2,50
GTK + 22.80
wxX113,00tidak siap untuk digunakan dalam produksi
Libui4,00
LCL (GTK)4,50
GTK + 35.00
wxGtk36,00
Efl7.20
GLFW9.00
JUCE10.00Projucer binary, jendela tidak kosong
Sciter10.00sekitar 10 MB, Linux Scapp tidak ada
LCUI11.00
GLUI12.50
SFML13.20
nanogui2 malam
Sdl2 malam
U ++2 malam
Agar3 sore
ImGUI (SDL) yang terhormat15.30
Guilite15.80
ImGUI yang terhormat (SDL / Vulkan)16.50
WinForms Mono16.564di windows 10
Qt5 sore
Ultralight20.00
sangat23.50
Ayunan Jawa59.30OpenJDK 12
elektron74.60
Javafx80,00OpenJDK 12
horus_ui94.00
Desktop bergetar98,00upd: pada tahap awal pengembangan!
Boost.UI-menggunakan wxWidgets
CEGUI-Bagaimana cara mengumpulkannya? :(?
IUP-mirip dengan wxWdigets, menggunakan gtk + di Linux
Lgi-menggunakan gtk + 2
Minigui-perakitan gagal
morda-perakitan gagal
SFGUI-menggunakan SFML
TGUI-menggunakan SFML
Verdigris-menggunakan qt


Saya terkejut dengan kerakusan Flutter, mengingat bahwa awalnya dibuat sebagai kerangka kerja untuk menciptakan GUI untuk perangkat mobile.

UPD (terima kasih kepada kirbyfan64sos ): Flutter Desktop masih dalam tahap awal pengembangan, dan semua build sedang debugging. Ini berarti bahwa semua profiler (seperti Observatory) aktif, semua pernyataan debug diaktifkan, dan kompiler AoT dinonaktifkan. Akan menarik untuk memeriksa ulang data menggunakan rilis build.


Saya tidak akan mengatakan bahwa saya terkejut dengan kinerja Elektron.


Dengan HorusUI, saya mengharapkan angka sekitar 20 MB, karena menggunakan OpenGL dan mode rendering langsung dari GUI. Saya tidak mengerti mengapa angka itu lebih banyak muncul.


Kerangka kerja Swing dan JavaFX Java juga telah menunjukkan hasil yang menarik. Keduanya sangat tak terpuaskan, dan jika Anda tidak yakin mana yang cocok untuk proyek Java baru Anda, maka tampaknya masuk akal untuk memilih kerangka JavaFX yang lebih nyaman dan modern, meskipun Anda harus mengisinya dengan sedikit lebih banyak memori. Tetapi jika ingatan Anda sepadan dengan bobotnya dalam emas, maka, tentu saja, pilih Swing.


Qt juga menunjukkan angka yang sangat menarik dan ternyata jauh lebih rakus daripada kebanyakan alat populer lainnya. Perlu dicatat bahwa sebagian besar memori yang ditempati olehnya adalah jumlah yang dikonsumsi oleh driver amdgpu yang diinstal pada sistem saya. Mungkin ini karena buffer OpenGL disimpan secara lokal. Hal yang sama dapat dilihat dengan SDL2: program tanpa OpenGL mengkonsumsi 1,1 MB, dan dengan itu sebanyak 14 MB.


WxWidgets dan LCL ditempatkan dengan baik dalam perbandingan ini. Terlepas dari kenyataan bahwa mereka membungkus alat lain untuk GUI, biaya sumber daya sangat minim. Saya terkesan dengan gagasan kemungkinan mentransfer backend dari Gtk +, misalnya, ke Qt, sehingga menjamin independensi dari alat.


Saya juga akan menyoroti Nuklear, hanya karena, menurut saya, ia memiliki mode rendering GUI yang sangat keren. Jika Anda tidak bingung dengan penggunaan framebuffer X11 mentah, aplikasi jendela tunggal Anda hanya akan menempati 0,624 MB, yang terlihat sangat mengesankan.


Kesimpulan


Jika Anda berharap untuk melihat kesimpulan umum di sini, maka, saya khawatir, saya harus mengecewakan Anda.

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


All Articles