Ich habe ein "kleines" Problem mit meiner WPF Anwendung. Der erste Zugriff auf meine DB findet im Window_Loaded Event statt um zwei Comboboxen mit Werten aus der DB zu füttern. Das dauert so zwischen 17 und 30 Sekunden. In dieser Zeit ist auch das gesamte Formular blockiert. Jeder weitere Zugriff gaht dann wesentlich schneller (ca. 1-2 sek.).
Kann man den Zugriff nicht irgendwie beschleunigen?
Ich lasse jetzt zumindest ein kurzes Infofenster einblenden, dass der Mensch bitte etwas warten soll, aber schön finde ich das nicht.
Ich kenne das Entity-Framework nicht so gut, aber ich vermute mal, dass bei deinem ersten Zugriff das Mapping initialisiert wird. Eine Möglichkeit wäre, einen Dummy-Zugriff auf die Datenbank beim Start der Anwendung durchzuführen (z.B. während der Splash-Screen angezeigt wird). Dann dauert zwar der Start länger, aber das wird erfahrungsgemäß vom Anwender eher toleriert als blockierte Eingabemasken. Möglicherweise bietet das EF ja auch Optionen, wleche die Performance des initialen Mappings beeinflussen. Aber wie gesagt, ich kenne das EF zu wenig.
der Start der App dauert sowieso schon so zwischen 20 und 30 Sekunden. Ich habe das jetzt mal mit dem SplashScreen versucht, das Ergebnis:
beim allerersten Abruchen von Daten wird die gesamte Anwendung blockiert. Der Vortschrittsbalken wird nicht angezeigt und läuft auch nicht. Und wenn ich den ersten Datenabruf in einem BackgroundWorker auslagere sieht das genauso aus.
Ich kann noch nicht einmal ein AnimatedGIF abspielen.
Kan man nicht wenigstens das cachen abschalten, solbst wenn dann die einzelnen Abfragen dann etwas länger dauern?
Je nach Version des EF gibt es für jede EntityCollection (DbSet oder Context.Set<>()) eine Load bzw. LoadAsync - Methode. Hierbei werden die Daten explizit (vor)geladen.
der Start der App dauert sowieso schon so zwischen 20 und 30 Sekunden. Ich habe das jetzt mal mit dem SplashScreen versucht, das Ergebnis:
beim allerersten Abruchen von Daten wird die gesamte Anwendung blockiert. Der Vortschrittsbalken wird nicht angezeigt und läuft auch nicht. Und wenn ich den ersten Datenabruf in einem BackgroundWorker auslagere sieht das genauso aus.
Ich kann noch nicht einmal ein AnimatedGIF abspielen.
Kan man nicht wenigstens das cachen abschalten, solbst wenn dann die einzelnen Abfragen dann etwas länger dauern?