ich habe eine Semitransparente Form über den gesamten sichtbaren Screen. Auf diesem Bereich werden Rechtecke gezeichnet welche eine Art Drag-Verhalten darstellen.
Das bedeutet der Benutzer kann Rechte auf dieser Form aufziehen.
Sobald aber 2 Monitore angeschlossen sind (1900x1200 und 1600x1900) kommmt es zu extremen performance einbussen.
Es wird als ginge die Hardware beschleunigung verloren.
Hat jemand informtionen wie sehr die WPF Performance bei so großen Zeichenbereiche leidet und ob man das optimieren kann ?
Mach mal ein Versuch und teste deine Anwendung mit einem Monitor und folgender Einstellung:
//Das kommt in das Loaded-Event deiner Anwendung. HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; HwndTarget hwndTarget = hwndSource.CompositionTarget; hwndTarget.RenderMode = RenderMode.SoftwareOnly;
Damit zwingst du WPF deine Anwendung explizit als Software zu rendern. Evtl. kannst du damit das Problem simulieren, da du schreibst es wäre so als ob die Hardware-Beschleuigung deaktiviert wäre.
Das hört sich aber eher nach Grafikkarte an. Die Performance von WPF hängt sehr davon ab, wieviele Elemente es verwalten muss. Ein Thread besorgt das Rendern und je mehr Elemente zu zeichnen sind, um so mehr geht die Performance in die Knie. Von der Fläche, die zu rendern ist, sollte das nicht so abhängen.
Um heraus zu finden, ob die Hardware-Beschleunigung deaktiviert wurde, fragst du RenderCapability.Tier ab:
int renderingTier = (RenderCapability.Tier >> 16);
Hier die einzelnen Werte: 0 - Keine Grafikhardware-Beschleunigung verfügbar 1 - Hardware-Beschleunigung teilweise verfügbar (DirectX >= 7 bzw. < 9) 2 - Hardware-Beschleunigung wird benutzt
Am besten testest du das in in den einzelnen Konstellationen, dann solltest du einen entsprechenden Anhaltspunkt bekommen.
Oft entstehenden Probleme auch durch einen komplexen Element-Aufbau.
Wie sieht es mit abgeschaltener Transparenz aus? Styles auf deinen Rectangles drauf? Generell DirectX in den unterschiedlichen Konstellationen getestet?