Frage

Meine WPF-Anwendung verwendet eine hohe CPU-Auslastung nach etwa 30 Minuten, dann breche ich die Anwendung, um herauszufinden, welcher code verbrachte hohe CPU-Auslastung, aber ich bekam nichts.

Visual Studio 2008 kann nicht zeigen Sie die aktuelle ausführen von code, aber ich fand das in der "Call Stack" panel:

[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   

was ist das?was ist Materie mit hoher CPU-Auslastung?und wie reduzieren Sie die CPU-Auslastung?

War es hilfreich?

Lösung

Wir verwendet "Performance-Profiling-Tools für WPF"/Visuelle Profil zu finden heraus, welche Veranstaltungen nehmen die meisten CPU-Auslastung.Tick(TimeManager.Tick ()), war ungefähr 40% CPU-Nutzung app.dann entfernten wir alle Animation-Steuert eine durch eine, endlich, wir fanden es war ein storyboard würden, erhöhen die CPU-Last nach etwa 30 Minuten.

dann änderten wir die form:


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

zu


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

dieses Problem wurde behoben.mehr Informationen über HandoffBehavior entnehmen Sie bitte der msdn-Website:

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.handoffbehavior.aspx

Andere Tipps

Sie sollten einen Blick auf den anderen Threads nehmen, denke ich, die Toggle-Threads zu zeigen, in dem Debug-Menü von Visual Studio ist. „[In einem Schlaf, warten, oder du“ bedeutet, dass der Faden nicht alles tun kann, weil es auf einem anderen Thread wartet abzuschließen es ist Betrieb.

Es könnte in einer Endlosschleife stecken irgendwo, entweder absichtlich oder nicht (absichtlich wie einige UI Sache kontinuierlich neu zu zeichnen, wie eine Animation oder etwas) Was auch immer es ist, es ist nicht in den aktuellen Thread in Ihrem Stapel gezeigt.

Sie haben einige Optionen für Ihr Problem aufzuspüren. Ich würde mit den Leistungs-Assistenten in Visual Studio starten 2008. Sie sich auf dem Menü Analysieren finden.

Ich bin kein WPF-Experte, aber die Call-Stack Sie hier wahrscheinlich zeigen, ist nicht Ihr Problem. Das Gewinde auf einem anderen Synchronisationsobjekt wartet und keine Arbeit zu tun. Der Grund VS kann das Ausführen von Code nicht angezeigt werden, weil es in nativen Code warten (wenn Sie nennen WaitAny () Ich glaube, dass Sie in eine native OS Konstrukt rufen, dass die tatsächliche Warte der Fall ist).

Gibt es andere Threads in Ihrem WPF-Prozess ausgeführt wird, die CPU-Zeit kann mit bis?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top