J'ai remarqué des pb de preformance dans mon application VB/ADO/SQL Server,
j'ai observé que cela provient de la déclaration des tables. En effet le cas
n°1 (voir code ci-dessous) est plus lent que le cas n°2 (voir code
ci-dessous) et du N°3 (voir code ci-dessous).
Pourquoi ? Y-a-t-il une différence entre le cas numéro 2 et numéro 3 ? Que
choisir ?.
Cas n°1 : Pas de fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection
Set BASE = New ADODB.Connection
Dim TABLE1 As New ADODB.Recordset
Set TABLE1 = New ADODB.Recordset
Dim TABLE2 As New ADODB.Recordset
Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ]
TABLE1.close
[ Traitement avec un open recordset ]
TABLE2.close
BASE .close
Set BASE = nothing
Cas n°2 : Fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection
Set BASE = New ADODB.Connection
Dim TABLE1 As New ADODB.Recordset
Set TABLE1 = New ADODB.Recordset
Dim TABLE2 As New ADODB.Recordset
Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ]
TABLE.close
Set TABLE1 = nothing
[ Traitement avec un open recordset ]
TABLE2.close
Set TABLE2 = nothing
BASE .close
Set BASE = nothing
Cas n°3 : Pas de déclaration avec : set TABLE =
Dim BASE As ADODB.Connection
Set BASE = New ADODB.Connection
Dim TABLE1 As New ADODB.Recordset
Dim TABLE2 As New ADODB.Recordset
[ Traitement avec un open recordset ]
TABLE.close
[ Traitement avec un open recordset ]
TABLE2.close
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Med Bouchenafa [MVP]
La syntaxe Dim NomVariable as New Object est à éviter autant que possible Elle fait que NomVariable est instanciée à chaque fois que VB la rencontre dans le code Cela peut conduire à des contractions logiques qui doivent être expliquées sur une des fiches de la KB. La plus célèbre de ces contradictions est fournie par l'exemple suivant
Dim X As New Objet ... ....traitement quelconque .... Set X = Nothing If X Is Nothing Then MsgBox "Vrai" Else MsgBox "Faux" End If
Si tu testes le code précédent, tu auras une petite surprise car X est instanciée à nouveau dans le IF
Le mieux est de toujours séparer la déclaration des variables Dim BASE As ADODB.Connection Dim TABLE1 As ADODB.Recordset Dim TABLE2 As ADODB.Recordset
de leur instanciation Set BASE = New ADODB.Connection Set TABLE1 = New ADODB.Recordset Set TABLE2 = New ADODB.Recordset ... .... Les traitement se font ici ... .... et pour sortir fermer proprement TABLE1.close TABLE2.close BASE .close e désallouer proprement l'espace Set TABLE1 = nothing Set TABLE2 = nothing Set BASE = nothing
-- Salutations Med Bouchenafa TETRASET 75015 Paris
"Daryl" a écrit dans le message de news: #e$
Bonjour,
J'ai remarqué des pb de preformance dans mon application VB/ADO/SQL Server, j'ai observé que cela provient de la déclaration des tables. En effet le cas n°1 (voir code ci-dessous) est plus lent que le cas n°2 (voir code ci-dessous) et du N°3 (voir code ci-dessous).
Pourquoi ? Y-a-t-il une différence entre le cas numéro 2 et numéro 3 ? Que choisir ?.
Cas n°1 : Pas de fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection Set BASE = New ADODB.Connection Dim TABLE1 As New ADODB.Recordset Set TABLE1 = New ADODB.Recordset Dim TABLE2 As New ADODB.Recordset Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ] TABLE1.close
[ Traitement avec un open recordset ] TABLE2.close
BASE .close Set BASE = nothing
Cas n°2 : Fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection Set BASE = New ADODB.Connection Dim TABLE1 As New ADODB.Recordset Set TABLE1 = New ADODB.Recordset Dim TABLE2 As New ADODB.Recordset Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ] TABLE.close Set TABLE1 = nothing
[ Traitement avec un open recordset ] TABLE2.close Set TABLE2 = nothing
BASE .close Set BASE = nothing
Cas n°3 : Pas de déclaration avec : set TABLE > Dim BASE As ADODB.Connection Set BASE = New ADODB.Connection Dim TABLE1 As New ADODB.Recordset Dim TABLE2 As New ADODB.Recordset
[ Traitement avec un open recordset ] TABLE.close
[ Traitement avec un open recordset ] TABLE2.close
BASE .close Set BASE = nothing
La syntaxe Dim NomVariable as New Object est à éviter autant que possible
Elle fait que NomVariable est instanciée à chaque fois que VB la rencontre dans le code
Cela peut conduire à des contractions logiques qui doivent être expliquées sur une des fiches de la
KB.
La plus célèbre de ces contradictions est fournie par l'exemple suivant
Dim X As New Objet
...
....traitement quelconque
....
Set X = Nothing
If X Is Nothing Then
MsgBox "Vrai"
Else
MsgBox "Faux"
End If
Si tu testes le code précédent, tu auras une petite surprise car X est instanciée à nouveau dans le
IF
Le mieux est de toujours séparer la déclaration des variables
Dim BASE As ADODB.Connection
Dim TABLE1 As ADODB.Recordset
Dim TABLE2 As ADODB.Recordset
de leur instanciation
Set BASE = New ADODB.Connection
Set TABLE1 = New ADODB.Recordset
Set TABLE2 = New ADODB.Recordset
...
....
Les traitement se font ici
...
....
et pour sortir fermer proprement
TABLE1.close
TABLE2.close
BASE .close
e désallouer proprement l'espace
Set TABLE1 = nothing
Set TABLE2 = nothing
Set BASE = nothing
--
Salutations
Med Bouchenafa
TETRASET
75015 Paris
"Daryl" <fausse@adresse.com> a écrit dans le message de news:
#e$67NBuDHA.2180@TK2MSFTNGP09.phx.gbl...
Bonjour,
J'ai remarqué des pb de preformance dans mon application VB/ADO/SQL Server,
j'ai observé que cela provient de la déclaration des tables. En effet le cas
n°1 (voir code ci-dessous) est plus lent que le cas n°2 (voir code
ci-dessous) et du N°3 (voir code ci-dessous).
Pourquoi ? Y-a-t-il une différence entre le cas numéro 2 et numéro 3 ? Que
choisir ?.
Cas n°1 : Pas de fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection
Set BASE = New ADODB.Connection
Dim TABLE1 As New ADODB.Recordset
Set TABLE1 = New ADODB.Recordset
Dim TABLE2 As New ADODB.Recordset
Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ]
TABLE1.close
[ Traitement avec un open recordset ]
TABLE2.close
BASE .close
Set BASE = nothing
Cas n°2 : Fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection
Set BASE = New ADODB.Connection
Dim TABLE1 As New ADODB.Recordset
Set TABLE1 = New ADODB.Recordset
Dim TABLE2 As New ADODB.Recordset
Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ]
TABLE.close
Set TABLE1 = nothing
[ Traitement avec un open recordset ]
TABLE2.close
Set TABLE2 = nothing
BASE .close
Set BASE = nothing
Cas n°3 : Pas de déclaration avec : set TABLE >
Dim BASE As ADODB.Connection
Set BASE = New ADODB.Connection
Dim TABLE1 As New ADODB.Recordset
Dim TABLE2 As New ADODB.Recordset
[ Traitement avec un open recordset ]
TABLE.close
[ Traitement avec un open recordset ]
TABLE2.close
La syntaxe Dim NomVariable as New Object est à éviter autant que possible Elle fait que NomVariable est instanciée à chaque fois que VB la rencontre dans le code Cela peut conduire à des contractions logiques qui doivent être expliquées sur une des fiches de la KB. La plus célèbre de ces contradictions est fournie par l'exemple suivant
Dim X As New Objet ... ....traitement quelconque .... Set X = Nothing If X Is Nothing Then MsgBox "Vrai" Else MsgBox "Faux" End If
Si tu testes le code précédent, tu auras une petite surprise car X est instanciée à nouveau dans le IF
Le mieux est de toujours séparer la déclaration des variables Dim BASE As ADODB.Connection Dim TABLE1 As ADODB.Recordset Dim TABLE2 As ADODB.Recordset
de leur instanciation Set BASE = New ADODB.Connection Set TABLE1 = New ADODB.Recordset Set TABLE2 = New ADODB.Recordset ... .... Les traitement se font ici ... .... et pour sortir fermer proprement TABLE1.close TABLE2.close BASE .close e désallouer proprement l'espace Set TABLE1 = nothing Set TABLE2 = nothing Set BASE = nothing
-- Salutations Med Bouchenafa TETRASET 75015 Paris
"Daryl" a écrit dans le message de news: #e$
Bonjour,
J'ai remarqué des pb de preformance dans mon application VB/ADO/SQL Server, j'ai observé que cela provient de la déclaration des tables. En effet le cas n°1 (voir code ci-dessous) est plus lent que le cas n°2 (voir code ci-dessous) et du N°3 (voir code ci-dessous).
Pourquoi ? Y-a-t-il une différence entre le cas numéro 2 et numéro 3 ? Que choisir ?.
Cas n°1 : Pas de fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection Set BASE = New ADODB.Connection Dim TABLE1 As New ADODB.Recordset Set TABLE1 = New ADODB.Recordset Dim TABLE2 As New ADODB.Recordset Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ] TABLE1.close
[ Traitement avec un open recordset ] TABLE2.close
BASE .close Set BASE = nothing
Cas n°2 : Fermeture de la table avec : set TABLE = nothing
Dim BASE As ADODB.Connection Set BASE = New ADODB.Connection Dim TABLE1 As New ADODB.Recordset Set TABLE1 = New ADODB.Recordset Dim TABLE2 As New ADODB.Recordset Set TABLE2 = New ADODB.Recordset
[ Traitement avec un open recordset ] TABLE.close Set TABLE1 = nothing
[ Traitement avec un open recordset ] TABLE2.close Set TABLE2 = nothing
BASE .close Set BASE = nothing
Cas n°3 : Pas de déclaration avec : set TABLE > Dim BASE As ADODB.Connection Set BASE = New ADODB.Connection Dim TABLE1 As New ADODB.Recordset Dim TABLE2 As New ADODB.Recordset
[ Traitement avec un open recordset ] TABLE.close
[ Traitement avec un open recordset ] TABLE2.close