| 

.NET C# Java Javascript Exception

1
Ich habe ein ziemlich dummes Problem und bräuchte einen Ansatz um es lösen zu können.

Ich habe eine WPF-MVVM Anwendung mit Client-Server Architektur. Auf dem Server werden alle Datenvorgänge über EF4.1 geregelt.

Ist die Datenbank leer, ist alles sehr performant und läuft akzeptabel.

Jetzt habe ich aber Echtdten eingespielt und die gesamte Anwendung ist Grotten langsam.

Alleine das öffnen einer Menü-Schaltflächen dauert 10sek und mehr - erst klappt es auf - dann erscheint der Text ganz transparent - und dann erst komplett.

Ich wüsste gerne, wie man die Ursache (ja, ich weiß, es ist die Menge der Daten) herausbekommen kann.
04.03.2014
MyKey0815 1,6k 2 9
Ist zwar jetzt nicht die Antwort auf Dein Problem, aber warum werden die Daten nicht asynchron geladen?
lbm1305 04.03.2014
Hast Du schon mal gemessen, wo die Zeit bleibt? Dauert es so lange, bis die Daten beim Client sind, oder braucht der Client so lange, bis die Daten im UI landen? Deiner Beschreibung nach tippe ich auf letzteres, und dann wäre es ganz hilfreich zu wissen, was für Controls Du verwendest.
Matthias Hlawatsch 04.03.2014
Also mit den Übertragen der Daten hat es nichts zu tun denk ich, denn die sind ja da, wenn ich die Menüschaltflächen drücken will. Als WPF-UI benutzen wir eigentlich .NET Steuerelemente die über das MODERN.UI-Framework von codeplex nur im Stil angepasst werden
MyKey0815 05.03.2014
Ich kann mich schwach an einen Vergleich zwischen EF und dem Datenzugriff per SqlDataRader erinnern. Das EF war, glaube ich, um den Faktor 3 langsamer. Und die Datenmenge ging in den 8steelligen Bereich.
lbm1305 05.03.2014
2
Profiler anwerfen und messen.
ffordermaier 05.03.2014
1 Antwort
3
Allgemein der Hinweis mit dem erhobenen Zeigefinger:
Die Tatsache, dass Ihr erst beim Einspielen von *Echtdaten* auf diese Probleme stoßt und nicht einmal lokalisieren könnt (Client, XAML, GUI, Service, Datenmenge, EF, Applikationsserver, Persistenceserver), zeigt, dass ihr bei der Architektur und bei der Entwicklung nicht nachgedacht zu haben scheint.
Im V-Model z.B. gibt es Unit-Tests (auf Klassenebene gegen Mocks) und Unit-Integrationstests (auf Komponentenebene gegen DB).
Hättet Ihr die Tests durchgeführt, wäre es gar nicht so weit gekommen.

Setzt Ihr ein Logging Framework ein? Wenn ja, so sollte es recht schnell möglich sein, über Stopwatches zu schen, welche Klassen/Methoden für das Problem verantwortlich ist.

Im Detail:
Wie Matthias schon angedeutet hat, solltest Du evaluieren, ob die Performance Probleme auf der Clientseite oder auf der Serverseite liegen. Auf Clientseite kann man dann schauen, ob es mit der XAML-Virtualisierung der Daten oder der Datenmenge insgesamt zu tun hat. Auf Serverseite könnte es am EF liegen, am Zugriff auf die DB, beim Erstellen der DTOs, dem Zusammenspiel von Applikationsserver und DB.
Wenn es letztlich doch an der Datenmenge liegt, so kann man hier über Lazy Loading Abhilfe schaffen.

Aber bevor Du nicht konkreter werden kannst, ist es müssig hier darüber zu diskutieren.
05.03.2014
judgy 3,0k 1 1 8
Neben den beschriebenen Tests von judgy würde ich auch die Datenbank selbst testen.

Da du nicht schreibst wie viele Produktiv Daten in die DB eingefügt worden sind, würde ich eine der Abfragen vom Entity Framework abfangen und den entstandenen SQL Code auf der Datenbank ausführen.

Vorher die Caches des SQL Servers löschen
http://www.mssqltips.com/sqlservertip/1360/clearing-cache-for-sql-server-performance-testing/

Ich vermute das entweder Indizes fehlen oder diese fragmentiert sind.
AlexF 11.03.2014

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH