مقارنة استخدام الذاكرة من أدوات واجهة المستخدم الرسومية المختلفة


مرحبا بالجميع! يعمل فريقنا على تطوير IDE للعمل مع واجهة برمجة تطبيقات TestMace . في أحد مقالاتنا السابقة ، أشار القراء إلى الاستهلاك العالي للغاية للذاكرة لتطبيقات الإلكترون. حسنًا ، لقد حان وقت الأرقام :) في هذه المقالة ، يقدر المؤلف استهلاك الذاكرة لتطبيقات النافذة الواحدة المكتوبة باستخدام مجموعة أدوات متنوعة. هل لديك قراءة لطيفة!


العثور على مجموعة مثالية من الأدوات لإنشاء واجهة المستخدم الرسومية ، قررت لقياس مقدار الذاكرة التي يشغلونها.


في الحقيقة ، أردت معرفة أي منها يتطلب أقل قدر من الذاكرة لبرنامج يتكون من نافذة واحدة فارغة. في هذه المقالة سأتحدث عن النتائج.



تنصل


توفر هذه المقالة معلومات حول الذاكرة التي يشغلها البرنامج عند استخدام مختلف الأدوات والأطر والمكتبات لإنشاء GUIs على Linux. تم إجراء جميع القياسات على الكمبيوتر نفسه باستخدام Ubuntu 19.04 (Disco Dingo) x86_64 باستخدام برنامج Ksysguard ، الذي يوفر بيانات حول الذاكرة الداخلية التي تستهلكها التطبيقات. لم أقم بإعادة تثبيت النظام خصيصًا للاختبار. تم تنفيذه على جهاز Ubuntu الموجود في كل مكان ، والذي تم بالفعل تثبيت حزم مختلفة عليه ، مما قد يؤثر / يشوه النتائج.


بالنسبة إلى بعض الأدوات ، قمت بإضافة قياسات تم الحصول عليها على نظام التشغيل Windows 10 ، والتي بالكاد يمكن مقارنتها بنظام Linux ، لكن من المثير للاهتمام رؤيتها.


أريد أن أشير إلى أن قياساتي ليست ذات قيمة علمية. وجود بيانات أولية أخرى ، يمكنك الحصول على نتائج مختلفة تمامًا.



ليس سهلا كما يبدو


إذن ماذا نحتاج للقياس؟ الذاكرة الافتراضية (VSZ)؟ الذاكرة المقيمة (RSS)؟ RSS الخاصة؟ RSS المشتركة؟


باختصار ، إذن ... أعتقد أنه عند مقارنة برنامجين متطابقين تم تطويرهما باستخدام مجموعات مختلفة من الأدوات ، فسيكون من الأدق قياس مقدار عملية ذاكرتها بالابتعاد. يستخدم Ksysguard اللقطات لعرض معلومات مفصلة عن الذاكرة. ومع ذلك ، منذ البداية ، في تجربتي ، استخدمت البيانات من لوحة استهلاك ذاكرة الوصول العشوائي افتراضيًا ، وعندها فقط أدركت أن عمليات الاستهجان تعطي أرقامًا أكثر دقة. لضمان اتساق البيانات ، استخدمت المعلومات من لوحة ذاكرة الوصول العشوائي الافتراضية لجميع الأدوات المعروضة في القائمة ، على الرغم من أنه على الأرجح ، باستخدام واجهة مع وصف تفصيلي لاستهلاك الذاكرة ، يمكن رؤية موقف مماثل.


إذا كان ذلك بمزيد من التفصيل ، ... ... في هذه المقالة ، ما كان لي أن أحصل على مساحة كافية لدروس حول إدارة الذاكرة في Linux ، وإلى جانب ذلك ، هناك بالفعل العديد من المواد الجديرة بالاهتمام بهذا الموضوع: ELC: ما مقدار الذاكرة التي تستخدمها التطبيقات فعلاً؟ ، / proc Filesystem ، proc - معالجة المعلومات الزائفة لنظام الملفات ، نظرة عامة على إدارة ذاكرة Linux ، إدارة الذاكرة


قائمة الأدوات ومؤشرات ذاكرتهم


ليست كلمة أكثر. وهنا نتائجي:


مجموعة أدوات واجهة المستخدم الرسوميةالذاكرة الخاصة (MB)تصريحات
XCB0.132
xlib0.156
نوكلير (rawfb)0624لا يزيد من الذاكرة التي يستهلكها Xorg
xforms0.765
وينابي (Win10)1.00على ويندوز 10
dlib1.10
SDL2 (بدون opengl)1.10
GDK1.20
رؤية توربو1.30TUI
نانا1.40
عزر1.50
FLTK1.70
MSEGui2.04
FOX2.20
نوكلير (x11)2.200.4 ميغابايت + 1.8 ميغابايت من ذاكرة Xorg
وينابي (النبيذ)2.30
LCL (customdrawn)2.50
Gtk + 22.80
wxX113.00ليست جاهزة للاستخدام في الإنتاج
libui4.00
LCL (GTK)4.50
Gtk + 35.00
wxGtk36.00
EFL7.20
GLFW9.00
جوس10.00منتج ثنائي ، النافذة ليست فارغة
Sciter10.00حوالي 10 ميغابايت ، Linux Scapp مفقود
LCUI11.00
GLUI12.50
SFML13.20
nanogui2 بعد الظهر
SDL2 بعد الظهر
U ++2 بعد الظهر
أجار3 مساءً
عزيزي ImGUI (SDL)15.30
GuiLite15.80
عزيزي ImGUI (SDL / فولكان)16.50
أحادية WinForms16564على ويندوز 10
كيو تي5 مساءً
خفيفة20.00
revery23.50
جافا سوينغ59.30OpenJDK 12
الإلكترون74.60
سكريبت80.00OpenJDK 12
horus_ui94.00
سطح المكتب رفرفة98.00محدث: في المراحل الأولى من التطوير!
Boost.UI-يستخدم wxWidgets
CEGUI-كيفية جمعها؟ :(؟
IUP-على غرار wxWdigets ، يستخدم gtk + على Linux
LGI-يستخدم gtk + 2
MiniGUI-فشل التجميع
morda-فشل التجميع
SFGUI-يستخدم SFML
TGUI-يستخدم SFML
زنجار-يستخدم كيو تي


لقد فوجئت بشراهة Flutter ، نظرًا لأنه صُمم في الأصل كإطار لإنشاء واجهة المستخدم الرسومية للأجهزة المحمولة.

UPD (شكري لـ kirbyfan64sos ): لا يزال Flutter Desktop في المراحل الأولى من التطوير ، وجميع عمليات الإنشاء قيد التصحيح. هذا يعني أن جميع ملفات التعريف (مثل Observatory) نشطة ، ويتم تمكين جميع عبارات التصحيح ، ويتم تعطيل برنامج التحويل البرمجي AoT. سيكون من المثير للاهتمام التحقق من البيانات باستخدام أداة إنشاء الإصدار.


لن أقول أنني فوجئت بأداء الإلكترون.


مع HorusUI ، كنت أتوقع رقمًا تقريبيًا يبلغ 20 ميغابايت ، لأنه يستخدم OpenGL وطريقة العرض الفوري لـ GUI. لا أفهم سبب ظهور الرقم بشكل أكبر.


كما أظهرت أطر Java Swing و JavaFX نتائج مثيرة للاهتمام. كلاهما لا يشبعان تمامًا ، وإذا لم تكن متأكدًا من أيهما سيكون مناسبًا لمشروع Java الجديد الخاص بك ، فيبدو من المعقول اختيار إطار عمل JavaFX الأكثر ملاءمة وحديثًا ، على الرغم من أنه سيتعين عليك ملء ذلك بذاكرة أكثر قليلاً. لكن إذا كانت ذاكرتك تستحق وزنها بالذهب ، فاختر Swing بالطبع.


أظهرت كيو تي أيضًا أرقامًا مثيرة للاهتمام للغاية وتبين أنها أكثر شراسة من معظم الأدوات الشائعة الأخرى. تجدر الإشارة إلى أن معظم الذاكرة التي تشغلها هي الكمية التي يستهلكها برنامج تشغيل amdgpu المثبت على نظامي. ربما يكون هذا بسبب تخزين مخازن OpenGL محليًا. يمكن رؤية الشيء نفسه باستخدام SDL2: يستهلك برنامج بدون OpenGL 1.1 ميغابايت ، ومعه يصل إلى 14 ميغابايت.


تم وضع WxWidgets و LCL في مكان جيد في هذه المقارنة. على الرغم من حقيقة أنها مغلفة على أدوات أخرى لواجهة المستخدم الرسومية ، فإن تكلفة الموارد ضئيلة. أنا معجب بفكرة إمكانية نقل الواجهة الخلفية من Gtk + ، على سبيل المثال ، إلى Qt ، وبالتالي ضمان الاستقلال عن الأدوات.


سأسلط الضوء أيضًا على Nuklear ، لأنه ببساطة ، يبدو لي أنه يحتوي على وضع عرض واجهة المستخدم الرسومية رائع جدًا. إذا لم تشعر بالارتباك من استخدام أداة إزالة إطار X11 الخام ، سيشغل تطبيق النافذة الواحدة الخاص بك فقط 0.624 ميجابايت ، وهو أمر مثير للإعجاب للغاية.


استنتاج


إذا كنت تأمل أن ترى أي استنتاجات معممة هنا ، إذن ، أخشى ، يجب أن أحبطك.

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


All Articles