سؤال

لدي تطبيق Windows CE يستخدم الكثير من الرسومات المتجهة ويكون بطيئًا جدًا في بعض الأماكن.أستخدم حاليًا GDI للعرض عبر صورة نقطية للتحديثات الخالية من الوميض.عادةً ما أقوم بالنوافذ على جزء من خريطة ثلاثية الأبعاد كبيرة.على بعض الأجهزة (على سبيل المثال.166 ميجا هرتز SH4)، يصبح هذا بطيئًا مع أوقات تحديث تتراوح من 3 إلى 5 ثوانٍ لمجموعات البيانات الكبيرة.سؤالي هو هذا؛

  • هل قام أي شخص بإجراء أي مقارنات بين السرعة النسبية للعمليات الرسومية على Windows mobile مقابل Win32.وبعبارة أخرى، يتم تصنيف النتائج من إصدار Win32 من البرنامج المطبق على إصدار WinCE، على افتراض أننا نبحث فقط عن مكالمات GDI.

  • هل حاول أي شخص إنشاء ملف تعريف على متن الطائرة على منصة WinCE (تطبيق C++)، إذا كانت الإجابة بنعم، فما هي الأدوات التي تستخدمها؟

  • هل يعرف أي شخص أي طرق لتحسين سرعة الرسم على نظام التشغيل Windows CE.أنا أتطلع حاليًا إلى FastGraph بعد التعليقات الواردة من أ السؤال السابق, ، ولكن هذا حل طويل المدى قليلاً.سيئ بكل ما هو عليه، أنا أبحث عن شيء أسرع لتنفيذه في الإصدار القادم.

هل كانت مفيدة؟

المحلول

قبل Windows CE 6.0 - وبالتالي بما في ذلك كافة إصدارات Windows Mobile/Windows Embedded Handheld - تم تنفيذ كود الرسومات في عملية أخرى (GWES.EXE)، مما يتطلب استدعاء عمليات مشتركة في كل مرة تقوم فيها بإجراء استدعاء GDI.تعتبر مكالمات العمليات المشتركة لـ CE 5.x أرخص بكثير من تلك الموجودة على سطح المكتب، ولكنها لا تزال أكثر تكلفة من استدعاء دالة عادية أو استدعاء في وضع kernel.

على سطح المكتب، يتم تطبيق GDI في وضع kernel منذ NT 4.0.في NT 3.1 الأصلي، كان يشبه نموذج CE، المكالمات عبر العمليات.للتخفيف من الحمل الزائد للمكالمات عبر العمليات أو مفاتيح وضع المستخدم/النواة، يقوم GDI لسطح المكتب بتجميع العمليات على جانب وضع المستخدم حتى تفعل شيئًا يتطلب منه مسح قائمة الانتظار - مثل تحديد قلم أو فرشاة مختلفة، أو استخدام واحدة من الوظائف القديمة التي تُرجع شيئًا آخر غير BOOL - أو أن المخزن المؤقت ممتلئ، أو يمكنك مسحه بشكل صريح عن طريق الاتصال GdiFlush.

لا يتمتع نظام التشغيل Windows CE بإمكانية التجميع هذه - حيث تؤدي كافة الاستدعاءات إلى استدعاء مباشر لعملية GWES، مما يجعلها أبطأ كثيرًا.يمكنك تخفيفه عن طريق القيام بأكبر قدر ممكن من العمل في كل مكالمة.إذا كنت بحاجة إلى خط معقد، ففكر في استخدام Polyline بدلاً من مكالمات MoveToEx/LineTo الفردية.حاول لمس كل بكسل مرة واحدة فقط بدلاً من عرض كائنات متداخلة، واستفد من المنطقة غير الصالحة لطلاء أجزاء الشاشة التي تحتاج إلى إعادة طلاء فقط (استخدم GetUpdateRgn أو GetUpdateRect ولكن افعل ذلك قبل الاتصال BeginPaint, ، والذي يمثل المنطقة صالحة).

يعد نموذج تسريع الرسومات CE أساسيًا إلى حد ما، حيث يعتمد على وحدات البت.وهو لا يدعم المجموعة الأكبر من الإمكانيات التي تدعمها برامج تشغيل أجهزة سطح المكتب التي تعمل بنظام التشغيل Windows 2000.يعتمد توفر أي تسريع على ما إذا كان الجهاز يحتوي على شريحة تسريع - ستستخدم العديد من الأجهزة وحدة تحكم LCD المضمنة في معالج التطبيق، والتي عادةً لا تقوم بأي تسريع.

يمكنك محاكاة سلوك CE على سطح المكتب عن طريق تعطيل التجميع باستخدام GdiSetBatchLimit لتعيين الحد إلى 1.ضع في اعتبارك أيضًا استخدام برنامج تشغيل الرسومات SVGA لتعطيل التسريع.في نظام التشغيل Windows Vista أو Windows 7، لا يتم تسريع GDI إذا كنت تستخدم بيئة Aero، حيث يتم تنفيذ جميع العمليات في البرنامج، على الرغم من أن Windows 7 أضاف بعض إمكانيات تسريع الأجهزة الجديدة.

يحتوي Windows CE 6.0 على نموذج جديد للنواة والعملية، والذي ينقل GDI إلى وضع kernel كما هو الحال في Windows المكتبي (قبل Vista)، لذلك يجب تقليل تكلفة استدعاء وظيفة GDI قليلاً.لا يوجد حتى الآن دفعة.

نصائح أخرى

ليس لدي الكثير من المعرفة بالجانب الرسومي للأشياء ولكن من خلال الخبرة، إذا كنت تريد أن تكون سريعًا في بعض الأشياء المحددة المتعلقة بالأجهزة، فكلما اقتربت من "المعدن" كلما تمكنت من الحصول على أسرع (وكلما أصبح الأمر أكثر صعوبة!) ).لذلك يمكنك النظر في استخدام تعادل المباشر أو مباشر 3D (على الرغم من أنني أعتقد أنهم سيسقطون D3D وينتقلون إلى OpenGL ES لـ WM7).قد ترغب في النظر في الطريقة التي يستخدمها مطورو الألعاب.

فيما يتعلق بمسألة الملفات الشخصية، لم أجد أيًا منها ولكنني أقوم ببناء ملف التعريف الخاص بي ملك.

لقد قمت بالكثير من هذا النوع من قياس الأداء، وكانت عمليات GDI أبطأ على WinCE من Win32 العادي، ولكنها أبطأ فقط بالنسبة للمعالجات الأبطأ على أجهزة WinCE.بمعنى آخر، لا يبدو أن هناك أي أداء إضافي نتيجة استخدام GDI في WinCE.

آسف، ليس لدي إجابات على سؤاليك الأخيرين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top