Je suis en train d'exécuter un certain nombre de threads qui tentent chacun d'effectuer des INSERTS dans une base de données SQLite. Chaque thread crée sa propre connexion à la base de données. Ils créent chacun une commande, ouvrent une transaction et exécutent des INSERTS puis clôturent la transaction. Il semble que le deuxième thread à tenter n'importe quoi obtient l'exception SQLiteException suivante: Le fichier de base de données est verrouillé. J'ai essayé de déballer les INSERTS de la transaction et de réduire la portée des INSERTS contenus dans chaque commit sans réel effet; l'accès ultérieur au fichier db déclenche la même exception.Difficulté à exécuter des INSERTS simultanés sur une base de données SQLite en C#
Des pensées? Je suis perplexe et je ne suis pas sûr où regarder la prochaine ...
cool .. j'ai considéré ceci, mais est-ce que cela garantit réellement qu'il ne se verrouillera jamais? J'ai l'impression que cela prendra plus de temps (en d'autres termes, réduire les chances de) de se refermer. Im opérant sur une très grande quantité de données et le processus prendra des heures sinon des jours ... –
aussi quand vous dites hautement concurrente, que voulez-vous dire exactement? mon application fonctionnera entre 1 et 20 de ces discussions dans des conditions normales d'utilisation. est-ce considéré comme une concurrence élevée? –
Si sérialisé à un thread, il n'aura pas d'erreurs de verrouillage. Alternativement, si vous réessayez sur les erreurs de verrouillage, ils n'empêcheront pas le programme de se terminer. SQLite n'est pas conçu pour la concurrence, mais il peut être fait pour fonctionner pour quelques threads qui ne sont pas souvent INSERT. Si vous avez plus de 3 threads qui insèrent tous, vous devez utiliser une base de données différente. –