|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() |
Bonjour,
je suis actuellement en stage pour mon DUT Informatique et je dois réaliser une couche portable Windows/Linux qui permette d'accéder, d'écrire, de lire, dans une base SQLite. Pour l'instant, j'ai réalisé cette couche, en m'appuyant sur la classe CppSQLite, et cela fonctionne parfaitement sous Linux. (Pourtant j'ai codé sous Windows avec Visual C++ 6 En fait, mon problème est le suivant : j'ai réalisé un programme de test qui fait une transaction de 200 000 insertions dans la base. Lorsque j'en lance un seul, pas de problème. J'en lance deux, pas de problème non plus, mon algo qui permet de gérer la concurrence d'accès fonctionne. En fait, lorsqu'une requête se solde par un SQLITE_BUSY, je stocke cette requête dans un vecteur. Ensuite, avant de fermer la base, je retente les requêtes contenues dans le vecteur. Si jamais ya encore SQLITE_BUSY, ben re-stockage dans le vecteur, etc. Par contre, quand j'en lance 3 à la fois, ça foire : les 2 permières transactions fonctionnent correctement et font leurs inserts, avec de bonnes performances. Par contre, la 3ème transaction se bloque sur son premier insert : j'ai débuggé avec Visual C++, et je me suis aperçu qu'en fait sqlite3_exec() ne renvoie même pas de code d'erreur, il se bloque tout simplement là-dessus. Avec mon responsable, on ena parlé, et il m'a mis une idée en tête : c'est peut-être tout simplement un paramètre de Windows à changer. Ah oui petite précision, on ne sait jamais : nous travaillons sous Windows 2000 et Linux Red Hat 7.1. Donc résumé : Linux -> nickel. Windows -> bloquage de la 3ème transaction sur le premier insert. Merci. |
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() |
Personne ne sait ?
Et en plus ça marche sous Linux... rien que pour me narguer... |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() |
J'ai un autre problème.
En fait sous Windows si je fais des séries d'insertions sans lancer de transaction à la main, c'est... 40 fois plus lent (j'ai mesuré) que sous Linux. Alors ça me paraît quand même bizarre cette affaire. Je ne sais pas si c'est lié avec mon autre problème, mais peut-être que la solution de celui-ci m'aidera pour l'autre. |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() |
YAHAHAHAAAAAAAA ! J'ai trouvé la solution à mon premier problème !!! En fait c'était une question de version de SQLite ! Après avoir recompilé 5000 fois la dll de différentes versions, je me suis rendu compte que j'avais oublié de la mettre dans system32
Bon je mets pas [Résolu] devant mon message car ya encore le problème de la lenteur sous Windows. Bon moi je m'en fous, a priori j'ai pas d'intérêt à ne pas utiliser de transaction, mais si jamais ça intéresse quelqu'un, on sait jamais. |
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 133 ![]() |
bonjour,
C'est un one man show ? Malheureusement je ne peux pas t'aider pour ton problème, mais je le suis depuis le premier post. Allez bon courage, j'espère que tu arriveras à faire passer la 2ème à ton appli sous windows. ++ |
|
|
00
|
|
|
#6 | ||||||
|
Membre régulier
![]() Inscription : septembre 2003 Messages : 137 ![]() |
Citation:
Citation:
Je veux dire : Code :
En tout cas, je n'ai pas remarqué de lenteur particulière, au contraire... Par contre si tu fais 200 000 fois ça: Code :
|
||||||
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() |
Oui, c'est un one man show
Par contre il faut écouter quand on parle : la lenteur sous Windows, c'est quand je n'utilise pas de transactions (en fait quand sqlite fait 1 transaction par insert). C'est quand même 47 fois plus que sous Linux |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com