2017-07-02 5 views
0

J'ai quelques tests automatisés qui utilisent SQLite.Net-PCL en tant que banque de support. Je trouve qu'au lieu d'utiliser un fichier réel, vous pouvez passer « : mémoire: » comme le chemin pour la chaîne de connexion, pour créer une mémoire de la base de données comme ceci:SQLite.NET en-mémoire (: memory :) base de données BEAUCOUP plus lent que la base de données basée sur les fichiers

public class MyRepositoryService : SQLiteAsyncConnection 
{ 
    public MyRepositoryService() 
     : base(() => new SQLiteConnectionWithLock(
       new SQLitePlatformGeneric(), 
       new SQLiteConnectionString(
        ":memory:", 
        false) 
       )) 
    { 
    } 
} 

À ma grande surprise, ce est beaucoup plus lent que d'utiliser un fichier normal. Un test qui prend ~ 100ms dans un fichier prend plus d'une minute avec la mémoire. Pourquoi?

Non seulement cela, mais plusieurs de mes tests commencent soudainement à défaut quand je passe à la base de données en mémoire - la plupart semblent être en rapport avec les tables ne sont créés

Suis-je vraiment obligé d'utiliser un Fichier- base de données basée pour mes tests unittle?

Répondre

0

Une base de données en mémoire disparaît lorsque la connexion est fermée. Par conséquent, chaque test crée une nouvelle base de données et doit à nouveau recréer toutes les tables.

+0

Je ne pense pas que ce soit la cause de la lenteur des performances. J'efface et recréer la base de données basée sur des fichiers pour chaque test – user1202032