Записывать действия в конец файла журнала по мере их возникновения.Это имеет два преимущества.Это очень быстро, и поэтому ваш пользовательский интерфейс все еще реагирует, и это означает, что в случае сбоя приложения действия не будут потеряны.
Затем создайте фоновый поток, который выполняет действия в файле и обновляет базу данных.После сбоя приложения вы можете перезапустить его, и фоновый поток просто обновляется с действиями, которые были безопасно сохранены в прошлом.Вы могли бы даже иметь отдельную службу приложения / процесса / Windows, которая выполняет фоновое обновление, и чтобы приложение пользовательского интерфейса выполняло только запись журнала.
Если вам действительно нужно избегать отдельного потока, вам потребуется выполнить обновления базы данныхв очень маленьких партиях, чтобы они были максимально быстрыми и в простой обработке.Но этот подход всегда будет хуже, потому что работа базы данных становится синхронной с вашим пользовательским интерфейсом.Так что ваш пользовательский интерфейс зависает на время.Любая проблема с базой данных, такая как тайм-аут из-за проблем с подключением, убивает пользовательский интерфейс.