У меня запущено несколько потоков, каждая из которых пытается выполнить INSERTS в одной базе данных SQLite. Каждый поток создает свое собственное соединение с БД. Каждый из них создает команду, открывает транзакцию, выполняя некоторые ВСТАВКИ, а затем закрывает транзакцию. Кажется, что второй поток для попытки чего-либо получает следующее SQLiteException: файл базы данных заблокирован. Я попробовал разворачивать INSERTS из транзакции, а также сузить область INSERTS, содержащуюся в каждом коммите, без реального эффекта; последующий доступ к файлу db вызывает одно и то же исключение.Сложность, выполняющая параллельные ВСТАВКИ на базе SQLite в C#
Любые мысли? Я в тупике, и я не уверен, где искать дальше ...
классный .. я считал это, но действительно ли это гарантирует, что он никогда не будет заблокирован? я чувствую, что он просто займет больше времени (другими словами, уменьшит шансы), чтобы снова запереться. im работает на очень большом количестве данных, и процесс займет несколько часов, если не дни ... –
также, когда вы говорите, что вы очень одновременно, что именно вы имеете в виду? мое приложение будет работать от 1 до 20 из этих потоков при нормальном использовании. это считается высокой параллелизмом? –
Если сериализован в один поток, он не будет иметь ошибок при блокировке. Кроме того, если вы повторите попытку блокировки ошибок, они не будут препятствовать завершению программы. SQLite не предназначен для параллелизма, но его можно заставить работать для нескольких потоков, которые часто не входят в INSERT. Если у вас есть 3+ темы, которые все вставляют, вы должны использовать другую базу данных. –