4 Stimmen

Schreckliche WPF-Leistung!

Warum verbrauche ich über 80 % der CPU, wenn ich nur über einige Links fahre? Wie Sie in dem Video sehen können, das ich hochgeladen habe: http://www.youtube.com/watch?v=3ALF9NquTRE die CPU geht auf >80% CPU, wenn ich mit der Maus über die Links fahre.

Mein Stil für die Artikel ist wie folgt

    <Style x:Key="LinkStyle" TargetType="{x:Type Hyperlink}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
        <Setter Property="TextBlock.TextDecorations" Value="{x:Null}" />
        <Setter Property="Foreground" Value="#FFDDDDDD"/>
        <Setter Property="Cursor" Value="Arrow" />
    </Style>    

Und warum?

1voto

Ana Betts Punkte 72423

Kein Grund zur Verwunderung - XPerf verwenden und herausfinden . Die Video zum Thema die auf der PDC09 gegeben werden, ist ausgezeichnet, Sie werden schnell wieder einsatzbereit sein.

1voto

Don Pavlik Punkte 126

Ich habe ein ähnliches Problem mit den Stilen in meiner Anwendung gehabt. Ohne die gesamte xaml-Datei der Benutzeroberfläche zu sehen, würde ich fragen, ob Sie irgendwelche Bitmap-Effekte verwenden, da diese Probleme mit der CPU-Leistung verursachen werden. Wenn Sie sind, empfehle ich nicht mit ihnen und stattdessen verwendet die optimierte Effekt-Optionen oder verwenden Sie die Shader-Bibliothek Unterstützung in WPF, um alle Effekte, die Sie suchen anzuwenden.

In meinem Beispiel hatte ich ein Element mit einem Schlagschatten-Bitmap-Effekt und konnte es auf den Schlagschatten-Effekt umschalten, erhielt den gewünschten Effekt und die CPU wurde nicht belastet. Wenn ich die Bitmap-Effekt hatte, war es tatsächlich neu zeichnen die ganze Rechteck-Region, die der Effekt auf war, so dass, wenn ich einen blinkenden Cursor hatte es jedes Kind Kontrolle von der übergeordneten, die den Bitmap-Effekt in ihm angewendet hatte neu zeichnen würde.

Wenn Sie keine Effekte verwenden, dann empfehle ich Ihnen, Ihren visuellen Baum zu betrachten und zu sehen, ob er mit UI-Elementen überladen ist. Und schließlich, und das ist manchmal das am meisten übersehene, überprüfen Sie Ihre Auslöser und/oder Ereignisse, die Sie für den Überstatus des Hyperlink-Typs, der angezeigt wird, definiert haben, könnte etwas da draußen hängen, das einige Probleme verursacht.

0voto

Robert Jeppesen Punkte 7761

Hyperlink ist Ihr eigener Typ, richtig?

Ich habe versucht, Ihren Stil auf einen TextBlock statt und konnte nicht bekommen CPU über 5% zu gehen, so vielleicht etwas geht innerhalb Hyperlink, wenn eine dieser Eigenschaften ändern. Versuchen Sie zu isolieren, welche Eigenschaft verursacht die CPU zu spike.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X