| 

.NET C# Java Javascript Exception

1
Hallo

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 ?
07.02.2011
Gentlehag 1,0k 3 8
5 Antworten
1
Hallo,

Jetzt weiß ich leider nicht unter welchem Windows deine Anwendung läuft, aber vielleicht hilft folgendes.

Für Windows XP und Windows Server 2003 gibt es einen Knowledge Base Eintrag bei Microsoft zu genau diesem Problem und auch einen HotFix:

http://support.microsoft.com/kb/937106/en-us

Analoges zu Windows Vista oder Windows 7 habe ich nicht gefunden.

Grüße
maria
11.02.2011
Maria Simlinger 1,1k 1 9
Danke für den Hinweis werde ich mal prüfen, auch wenn zwei der Testsysteme Windows 7 waren.
Gentlehag 11.02.2011
0
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.
07.02.2011
Konstantin 3,7k 1 8
Habe festgestellt dass es auch auf einem Monitor auftritt, wenn man eine entsprechend große Auflösung hinbekommt.

Anscheinend ist die große Fläche an sich ein Problem.

Kann das jemand verifizieren?
Gentlehag 11.02.2011
0
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.
07.02.2011
tack 294 1 8
Habe es auf mehreren Rechnern mit verschiedenen Architekturen getestet. Einen Gaming PC, office PC, Notebook usw..

Dabei waren sowohl die CPU's als auch die Grafikkarten von verschiedenen Herstellern.
Gentlehag 11.02.2011
0
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.
07.02.2011
Norbert Eder 383 4
1
Ergebnis ist immer 2
Gentlehag 11.02.2011
Wie sieht es mit abgeschaltener Transparenz aus?
Styles auf deinen Rectangles drauf?
Generell DirectX in den unterschiedlichen Konstellationen getestet?
Norbert Eder 12.02.2011
0
Verwendest du unter Umständen Bitmap Effekte? Diese können die Perfomance (enorm) drücken. Weiters sind sie mittlerweile obsolet.

Eventuell kann dir auch die WPF Performance Suite helfen.
08.02.2011
Maria Simlinger 1,1k 1 9
Nein verwende keine Bitmapeffekte.
Wie gesagt nur ein einfaches Rectangle :-(
Gentlehag 11.02.2011

Stelle deine .net-Frage jetzt!