2009-07-24 5 views
1

Je pense que j'éprouve un délai de connexion de base de données avec ma connexion SQLite, mais je ne suis pas sûr de savoir comment augmenter le délai de connexion. La commande timeout peut être définie avec ConnectionString.DefaultTimeout mais Connection.ConnectionTimout est en lecture seule. Aucune suggestion?Définir ConnectionTimeout dans System.Data.SQLite

Merci, Brian

Répondre

10

Dépasser le délai d'attente par défaut (30 secondes) pour les requêtes SQLite est une forte indication que quelque chose ne va pas dans votre approche.

Les dépassements de délai se produisent généralement lorsqu'il y a trop de connexions simultanées. SQLite se comporte mal lorsque vous avez des transactions d'écriture/lecture entrelacées.

Assurez-vous que vous avez regroupé des instructions SQL liées en une seule transaction (les gains de performances peuvent être x1000!).

Un autre conseil: par défaut - lorsque vous démarrez une transaction (BeginTransaction) - le comportement par défaut est d'obtenir un verrou en écriture immédiatement. Essayez plutôt d'utiliser la version BeginTransaction (deffered) et spécifiez que vous souhaitez différer l'acquisition d'un verrou en écriture jusqu'à ce que ce soit réellement nécessaire. Cela vous aidera si vous avez plusieurs lecteurs parce que maintenant ils seront en mesure de fonctionner simultanément.

+0

très utile merci! –

+1

C'est le meilleur conseil que quelqu'un puisse donner. Souvent, la réponse ne lâche pas plus de matériel (en changeant le délai de connexion ici) mais plutôt en trouvant la racine du problème de performance - la requête. Et cela peut être dur. J'ai fait du profilage de performance sur de nombreuses bases de données et certains problèmes de performance peuvent prendre des SEMAINES à trouver, mais en y ajoutant plus de matériel, ce n'est pas la solution à long terme. –

Questions connexes