Unten ist eine (sehr naive) Implementierung von Conways Spiel des Lebens in WPF. Es ist nur eine Demo ...
xaml:
%Vor%Code dahinter:
%Vor%So sieht es aus:
Wenn ich %code% durch %code% ersetze, läuft das Programm viel langsamer. Warum?
Ich teste unter Windows 7 64-Bit mit 2010 Express.
Es gibt nichts besonderes an der Verwendung von %code% .
Wenn Sie Ihren eigenen lokalen Pinsel außerhalb des Makrosschritt-Event-Handlers definieren und ihn dann einfrieren, verhält er sich genauso wie bei der Verwendung von Brushes.White. Wenn Sie es nicht zuerst einfrieren, wird es sich weit, viel schlechter verhalten.
Die beste Leistung besteht darin, Ihren Pinsel einmal zu Beginn jedes Aufrufs von macroStep vor der Schleife zu erstellen und ihn dann einzufrieren. Es ist eine deutliche Verlangsamung, wenn Sie einen neuen Pinsel in der innersten Schleife erstellen.
Wenn Sie außerdem das Intervall für den Code mit schlechtem Verhalten erhöhen, wird das Leistungsproblem behoben. Meine Vermutung ist, dass es eine Art Ressourcenbereinigung gibt, die in einem Hintergrundthread nach dem Rendern jedes Mal auftritt, das an die Interna des Pinsels geknüpft ist, aber es wird nicht in der Lage sein, seine Bereinigung zu machen, weil du gerade umdrehst und Verwenden des Pinsels in der nächsten Iteration. Um dies zu demonstrieren, habe ich einen Pinselpool erstellt und benutze jedes Mal einen anderen Pinsel:
%Vor%Wenn Sie die Anzahl der Pinsel auf 1 setzen, ergibt sich dasselbe Verhalten wie bei Verwendung von %code% . Aber wenn Sie es auf 2 oder mehr setzen, erhalten Sie die Leistung, die Sie erwarten.
Weil %code% einen Alpha-Wert von Null hat, was bedeutet, dass WPF es nicht rendern muss, weil es vollständig transparent ist - andererseits ist das Alpha der weißen Farbe 255, was bedeutet, dass es eine vollständig weiße Farbe ist gerendert.