
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:

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.