2010-01-07 11 views
0

J'ai été déconner avec le SQLite Designer dans Visual Studio 2008 et j'ai remarqué que lorsque j'utilise les instructions Insert/Update générées, elles sont extrêmement lentes.C# System.Data.SQLite Designer Code

Exemple: J'ai une table de données avec quatre colonnes et 5.700 lignes il a fallu environ 5 minutes pour insérer les données dans la table de base de données

Cependant, je l'ai écrit ma propre connexion de base de données et insérer des méthodes utilisant des paramètres et une seule transaction et les mêmes 5700 lignes ont été insérées en moins d'une seconde.

Pourquoi le code généré est-il si lent et quel avantage y a-t-il à l'utiliser?

Merci.

Nathan

+0

Avez-vous accès aux méthodes générées? Peut-être font-ils du travail supplémentaire, comme envelopper tout dans les transactions, ou peut-être faire une validation supplémentaire des données? – Eilon

+0

Je suis assez sûr qu'ils emballent tout dans les transactions et autant que je sache, je n'ai pas accès aux méthodes où je pourrais le changer. – Nathan

Répondre

0

J'ai lu que le comportement par défaut dans SQLite est d'encapsuler chaque instruction Insert dans une transaction, ce qui, je pense, explique le comportement que vous voyez. Lorsque le moteur SQLite crée les instructions Insert, cela prend beaucoup de temps et lorsque vous écrivez le sql, il s'exécute très rapidement.

http://www.sqlite.org/faq.html#q19

0

si je nderstood à juste titre que la déclaration d'insertion est construit dans le code-behind et il est normal que cela prendrait beaucoup de temps pour exécuter ... il doit être compilé, traité transformé en CLR etc. Si Si vous utilisez une procédure stockée sur la base de données, cela prend moins de temps, car cette procédure, lorsque vous l'appelez depuis le code-behind, a déjà passé ces étapes. Il est toujours préférable et plus rapide d'utiliser les procédures directement à partir des bases de données que de les écrire en code-behind.