Ich benutze ASP.MVC 5 und EF6. Mein Zweck besteht darin, die Datenbank mit Daten von einem anderen Server zu füllen und die Benutzerschnittstelle nicht zu blockieren.ASP.MVC EF6 Basis Füllung blockiert Benutzeroberfläche
Das Füllen der Datenbank dauert sehr lange, etwa 10-15 Minuten. Und der Benutzer kann zu diesem Zeitpunkt mit dem System arbeiten. Jetzt hat er einige Minuten lang einen sehr schlechten Frost. Also, die Tatsache ist, dass Benutzer Daten von der Basis laden und Aufgabe laden Daten in die Datenbank auf einmal.
Ich habe versucht, Datenbank-Füllcode zu einem anderen Threads zu setzen, aber es hat nicht geholfen. Wenn sich der Benutzer zum ersten Mal anmeldet, führt er eine Aktion aus, die das Füllen der Datenbank startet. Nach dieser Aktion kann der Benutzer alles andere tun und die Schnittstelle darf nicht blockiert werden.
Wenn Benutzer das System verwenden, muss er immer einige Daten aus meiner Datenbank laden. Zum Beispiel: wenn der Benutzer eine Seite auf 1 Minute sieht, gibt es 10000 geladene Daten, nach 2 Minuten gibt es mehr Daten und so weiter.
Und es gibt eine andere Frage: Ich habe die Fähigkeit, Daten mit etwa 10 Threads auf einmal zu downloaden. Wie kann ich diesen Code ändern, um dies zu tun?
p.s. Code kann hier einige Tippfehler enthalten
Ich kann nicht sehen, nur 1 AppDBContext für alle Operationen zu verwenden. Problem ist, dass Kontext nach 1-2 Minuten mit Ausnahme plötzlich geschlossen werden kann. Wir vermeiden dieses Problem mit dem Owin-Kontext, aber es funktioniert nur für Aktionen und Task ist keine Aktion. – stationfuk
Erstellen Sie den Kontext nach n Einfügungen neu oder verwenden Sie "System.Data.SqlClient.SqlBulkCopy". Ausnahme nach 1-2 Minuten ist wahrscheinlich "OutOfMemoryException". Siehe: [Schnellste Methode zum Einfügen in Entity Framework] (http: // stackoverflow.com/a/5942176/5246410) –
'SaveChanges' sollte auch außerhalb der Schleife sein, so dass Sie nicht für jede Elementaktualisierung mit Datenbankaufruf enden. –