SQlite in Memory Datenbank

Bei der aktuellen Version meines AmazingObservers 2 werden nach einer Aktualisierung relativ viele Updates geschrieben. Um die Performance an dieser Stelle etwas zu optimieren, habe ich mich gefragt, ob ich diese Datenbank, während die Updates geschrieben werden, nicht im Speicher halten kann. In C# lässt sich das relativ leicht umsetzten. Für eine Single-User Application mit einer kleinen Datenbank kann man das mal machen. Denn eigentlich verstößt das ganze ja gegen das ACID Prinzip. Denn wenn während der Updates der PC Abstürzt sind alle Änderungen weg. Da dies bei mir aber auch keine große Rolle spielt, habe ich das mal umgesetzt.

using (SQLiteConnection connSource = new SQLiteConnection("Data Source=" + _Filename))
{
  using (SQLiteConnection connDestination = new SQLiteConnection("Data Source =:memory:"))
  {
    connSource.Open();
    connDestination.Open();
    connSource.BackupDatabase(connDestination, "main", "main", -1, null, 0);
    connSource.Close();
 
    // Updates, Inserts, Deletes   
 
    connSource.Open();
    connDestination.BackupDatabase(connSource, "main", "main", -1, null, 0);
  }
}

Die Quelldatenbank und die Zieldatenbank (In Memory) wird geöffnet. Mit BackupDatabase kopiert man dann die produktive Datenbank in die Zieldatenbank. Danach kann man seine ganzen Änderungen durchführen (Insert, Updates, Deletes). Sobald das abgeschlossen ist macht man wieder ein Backup. Diesmal aber von der In Memory Datenbank wieder zurück auf die Platte.

Das Ganze läuft bei mir jetzt deutlich flotter und die Festplatte muss nicht mehr so hart arbeiten während der ganzen Updates.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert