2014-02-19 3 views
5

Bei der Verwendung des Projekts Community.MvvmCross-SQLite in einer mvvmcross-App unter Windows Phone 8 treten einige Probleme auf. Wir haben einige Hintergrundthreads (mit Task.Run()), die als Antwort auf die Datenbank lesen/schreiben Updates von einem Server - Da das Update einige Sekunden dauern kann, möchten wir nicht, dass die Benutzeroberfläche einfriert.Wie soll ich meine Verbindungen in einer Multithread-App mithilfe der MvvmCross-SQLite Community Edition einrichten?

Beim Ausführen der App treten einige Abstürze auf, in denen Nachrichten wie "Datenbank fehlt oder beschädigt" angezeigt werden. Beim Debuggen der Situation sehen wir einen Absturz beim Zugriff auf die Datenbank über die Hintergrundthreads.

Wir haben versucht, eine gemeinsame SqliteConnection über das gesamte Projekt zu verwenden, und jedes Mal, wenn wir versuchen, in die Datenbank zu schreiben, kapseln wir den Aufruf in eine lock() -Anweisung.

  • Ist es in Ordnung, die gleiche Verbindung zu verwenden, oder sollten wir für jede Operation neue Verbindungen erstellen?
  • Wie ist der Status der Multithread-Unterstützung in der zugrunde liegenden Community.CSharpLiteSqlite.WP7-Bibliothek?

Antwort

0

SQLite und mehrere Threads

SQLite Unterstützung drei verschiedene Gewindearten:

1.Single-Gewinde. In diesem Modus sind alle Mutexe deaktiviert und SQLite kann nicht in mehr als einem Thread gleichzeitig verwendet werden.

2.Multi-Thread. In diesem Modus kann SQLite sicher von mehreren Threads verwendet werden, vorausgesetzt, dass keine einzelne Datenbankverbindung gleichzeitig in zwei oder mehr Threads verwendet wird.

3.Serialisiert. Im serialisierten Modus kann SQLite ohne Einschränkungen von mehreren Threads verwendet werden.

SqliteTheadSafe Documentatioon

+0

http://stackoverflow.com/questions/8227796/sqlite-database-is-locked-error-in-multithreads-application?rq=1 – Eldho

Verwandte Themen