2010-03-08 11 views
8

Ein Projekt, an dem ich arbeite, leidet an einigen kleineren Leistungsproblemen. Unser Team führt viele kleine Verbesserungen durch, um größere Leistungssteigerungen zu erzielen. Es ist uns gelungen, die Anwendung durch offensichtliche Änderungen zu verbessern, und wir haben uns auf die Datenbindung konzentriert, um einige zusätzliche Verbesserungen bereitzustellen. Ich weiß, dass der Standard-Bindungsmodus TwoWay ist, aber die meisten unserer Bindungen erfordern keine TwoWay-Bindung. Wäre es unsere Zeit wert, den Modus als OneWay explizit anzugeben, wo wir den Standard akzeptiert haben?Gibt es einen Leistungsvorteil beim expliziten Angeben der OneWay-Bindung beim Einrichten von Bindungen in WPF?

+0

Es gibt einige Datenbindungssituationen, die von Microsoft bestätigt wurden, um Speicherlecks gemäß diesem Fehler zu verursachen: http://support.microsoft.com/kb/938416 – jeffora

Antwort

4

Sorry, 1. Version ist 100% falsch (Danke, @ Jeffora). Ich behalte es hier, sonst machen die Kommentare keinen Sinn.

Eine unidirektionale Bindung muss keine Verbindung mit der Quelle herstellen, um auf Änderungsbenachrichtigungen zu warten, so dass weniger Arbeitsspeicher erforderlich ist. Was die Geschwindigkeit angeht, kann ich mir nicht vorstellen, dass es einen Unterschied gibt .

2. Version: Sowohl OneWay- als auch TwoWay-Bindungen abonnieren die Quelle für Änderungen, um die Zieleigenschaft zu aktualisieren. Der Leistungsunterschied ist also die Aktualisierung der Quelleigenschaft, die Auswirkungen haben kann, abhängig davon, was der Rest der Software bei der Aktualisierung tut.

Wenn die Leistung entscheidend ist und Ihr Szenario keine Zielupdates benötigt, kann die Verwendung der OneTime-Bindung eine Option sein.

Ich nutze die Gelegenheit dieser Korrektur zu fragen, ob Sie Ihre App profiliert, um Hotspots zu finden. Die 80/20-Regel (oder das Ereignis 90/10) ist ziemlich häufig, d. H. Eine kleine Menge an Code ist für den Großteil der aufgewendeten Zeit verantwortlich. Ohne es zu wissen, könnten Optimierungsbemühungen überhaupt keinen Gewinn bringen.

+0

Interessant. Wenn wir also davon sprechen, dass mehrere hundert solcher Bindungen aufgebaut sind, ist es denkbar, dass die Verkabelung dieser hörenden Ereignisse beim Erstellen des Fensters CPU-Zyklen aufsaugt. Es könnte also sein, dass es einen Geschwindigkeits- und Speichertreffer gibt, richtig? – Kilhoffer

+0

Richtig, ich habe die Zeit, die für diesen Verbindungsaufbau benötigt wird, nicht berücksichtigt, aber bei Tausenden von ihnen können sie eine Rolle spielen. – Timores

+1

Eine unidirektionale Bindung wartet immer noch auf die Quelle für die Änderungsbenachrichtigung - eine einmalige Bindung tut dies nicht. – jeffora

Verwandte Themen