CurrentDb et performances
Le saviez-vous ?
CurrentDb
est un objet DAO qui fait référence à la base de données active. C’est un objet fondamental, qui sert de point de départ pour pas mal de traitements.
Test #1
Mais l’instanciation d’objets est un processus gourmand en performances. Vous pouvez le vérifier très facilement si vous utilisez CurrentDb
dans une boucle. Voici un bout de code pour tester ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
' --- ' EXEMPLE DE BOUCLE SUR CURRENTDB ' --- ' Sub TestDb1() Dim sngT1 As Single, sngT2 As Single Dim intI As Integer Dim strTest As String ' Temps de départ sngT1 = Timer ' On stocke x fois le nom de la base For intI = 1 To 32000 strTest = CurrentDb.Name Next ' Temps de fin sngT2 = Timer MsgBox "Durée : " & (sngT2 - sngT1), vbInformation End Sub |
A chaque tour de boucle, le chemin de la base de données est simplement stocké dans la variable strTest
(il n’est même pas affiché). Le problème est que CurrentDb
est rappelé à chaque tour de boucle. Et voici les résultats (en secondes) sur une machine de test :
Test #2
Le même code, un peu amélioré :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' --- ' EXEMPLE DE BOUCLE SUR CURRENTDB ' --- ' Sub TestDb2() Dim sngT1 As Single, sngT2 As Single Dim intI As Integer Dim strTest As String ' Temps de départ sngT1 = Timer ' Stocker l'instance de la base active Dim db As DAO.Database Set db = CurrentDb ' On stocke x fois le nom de la base For intI = 1 To 32000 strTest = db.Name Next ' On libère la variable db Set db = Nothing ' Temps de fin sngT2 = Timer MsgBox "Durée : " & (sngT2 - sngT1), vbInformation End Sub |
Les retouches :
- Une variable
db
, de typeDAO.Database
, est créée en début de listing. - Cette variable reçoit l’instance de
CurrentDb
. - Dans la boucle, on fait appel à la variable
db
plutôt qu’àCurrentDb
. C’est là où on gagne des performances ! - N’oubliez pas, en fin de code, de libérer vos variables objet. Ici :
Set db = Nothing
.
Les résultats parlent d’eux-mêmes :
En résumé : pensez à stocker CurrentDb
dans une variable, si vous devez l’utiliser plusieurs fois dans votre code !