كيفية تقليل استخدام وحدة المعالجة المركزية من تطبيق WPF؟

StackOverflow https://stackoverflow.com/questions/824832

  •  05-07-2019
  •  | 
  •  

سؤال

وبلدي تطبيق WPF يستخدم استخدام CPU عالية بعد حوالي 30 دقائق، وبعد ذلك كسر التطبيق لمعرفة ما قضى كود استخدام CPU عالية، ولكنني لم يحصل على شيء.

والبصرية ستوديو 2008 لا يمكن عرض كود تشغيل الحالي، ولكنني وجدت هذا في "الاستدعاءات" لوحة:

[In a sleep, wait, or join] 
mscorlib.dll!System.Threading.WaitHandle.WaitAny(System.Threading.WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext) + 0x8f bytes 
System.dll!System.Net.TimerThread.ThreadProc() + 0x2f9 bytes    
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x66 bytes   
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes    
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes   

ما هذا؟ ما هو الأمر مع استخدام وحدة المعالجة المركزية عالية؟ وكيفية الحد من استخدام وحدة المعالجة المركزية؟

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

المحلول

وكنا "أداة التنميط الأداء لبرنامج الأغذية العالمي" / البصرية الملف لتبين الأحداث التي تأخذ معظم استخدام وحدة المعالجة المركزية. القراد (TimeManager.Tick ()) ويستغرق حوالي 40٪ استخدام وحدة المعالجة المركزية من التطبيق. ثم أزلنا جميع الرسوم المتحركة ضوابط واحدا تلو الآخر، وأخيرا، وجدنا أن هناك لوحة العمل من شأنه أن يزيد استخدام وحدة المعالجة المركزية بعد حوالي 30 دقيقة.

وبعد ذلك قمنا بتغيير النموذج:


calendarStoryboard.Begin(txtMessage, HandoffBehavior.Compose, true);

إلى


calendarStoryboard.Begin(txtMessage, HandoffBehavior.SnapshotAndReplace, true);

وكان قد حدد هذه المسألة. لمزيد من المعلومات حول HandoffBehavior يرجى الرجوع إلى MSDN:

http://msdn.microsoft كوم / EN-US / مكتبة / system.windows.media.animation.handoffbehavior.aspx

نصائح أخرى

ويجب أن نلقي نظرة على المواضيع الأخرى، وأعتقد أن تبديل لإظهار المواضيع في القائمة تصحيح استوديو البصرية. "[في النوم، والانتظار، أو الانضمام" تعني أن موضوع لا تستطيع أن تفعل أي شيء لأنه ينتظر على موضوع آخر لإتمام انها العملية.

وربما يكون عالقا وفي حلقة لا نهائية في مكان ما، إما عن قصد أم لا (مثل عمدا عن بعض الشيء UI إعادة رسم بشكل مستمر، مثل الرسوم المتحركة أو شيء) أيا كانت، وانها ليست في موضوع الحالي هو مبين في الكدسة.

لديك بعض الخيارات لتعقب مشكلتك. وأود أن تبدأ مع معالج الأداء في Visual Studio 2008. سوف تجد أنه في القائمة تحليل.

وأنا لست خبير WPF، ولكن مكدس الاستدعاءات التي تظهر هنا ربما ليس مشكلتك. أن موضوع ينتظر على بعض وجوه تزامن آخر ولا تقوم بأي عمل. السبب VS لا يمكن عرض رمز تشغيل لأنه ينتظر في التعليمات البرمجية الأصلية (مرة واحدة استدعاء WaitAny () وأعتقد استدعاء إلى بناء نظام التشغيل الأصلي أن يفعل الانتظار الفعلي).

هل هناك أي المواضيع الأخرى التي تعمل في عملية WPF الخاصة بك التي قد تستخدم حتى وقت وحدة المعالجة المركزية؟

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