OVH Cloud OVH Cloud

vitesse de DAO3.6 sous VB.NET

5 réponses
Avatar
Fredo
bonjour !



je suis en train de reecrire en VB.NET une tres grande application (
conception de pieces, generationde plans DAO, pilotage de centre d'usinage
et systeme d'acquisition), que j'avais écrit en VBA sous Acces.



Je voulais recuperer tout la partie qui concerne la base de données, qui
était ecrite en DAO 3.6.



Si j'intègre cette bibliothèque, tout fonctionnne parfaitement, sauf la
vitesse.

En ecriture en VBA avec creation de 1000 enregistrmeents par seconde ,
j'affiche une charge de CPU de 12%,

alors qu'en VB.NET avec 80 enregistrements par sec j'affiche une charge CPU
de 80%?



Au secours, qui a une idée



j'accède de la façon suivant a la base de données :



Dim Dbe As DAO.DBEngine

Dim Db As DAO.Database

Dim rs As DAO.Recordset

Dbe = New DAO.DBEngine

Db = Dbe.OpenDatabase(cheminAccesBase)

rs = Db.OpenRecordset("SELECT * MesuresPoints")



j'ecris dans la base de la facon suivante

rs.addnew()

rs.fields("nomchamps").value=valeur

rs.update



si j'ecris en SQL une instruction d'ajout, c'est curieusement encore plus
lent



qui a une idée??

5 réponses

Avatar
Sébastien
Salut,

je pense que DAO n'est pas très optimiser en dehor d'access ... si tu veux
avoir qq chose de plus rapide, tourne toi vers ADO.NET, mais cela t'obligera
a reecrire une bonne partie de ton code...

a++
seb

"Fredo" a écrit dans le message de news:
eoEH%
bonjour !



je suis en train de reecrire en VB.NET une tres grande application (
conception de pieces, generationde plans DAO, pilotage de centre d'usinage
et systeme d'acquisition), que j'avais écrit en VBA sous Acces.



Je voulais recuperer tout la partie qui concerne la base de données, qui
était ecrite en DAO 3.6.



Si j'intègre cette bibliothèque, tout fonctionnne parfaitement, sauf la
vitesse.

En ecriture en VBA avec creation de 1000 enregistrmeents par seconde ,
j'affiche une charge de CPU de 12%,

alors qu'en VB.NET avec 80 enregistrements par sec j'affiche une charge
CPU
de 80%?



Au secours, qui a une idée



j'accède de la façon suivant a la base de données :



Dim Dbe As DAO.DBEngine

Dim Db As DAO.Database

Dim rs As DAO.Recordset

Dbe = New DAO.DBEngine

Db = Dbe.OpenDatabase(cheminAccesBase)

rs = Db.OpenRecordset("SELECT * MesuresPoints")



j'ecris dans la base de la facon suivante

rs.addnew()

rs.fields("nomchamps").value=valeur

rs.update



si j'ecris en SQL une instruction d'ajout, c'est curieusement encore plus
lent



qui a une idée??




Avatar
nathalie.steinhilber
j'ai testée, c'est encore bien plus lente que la DAO, d'ailleurs dans le
fichiers d'aide du Visual Studio j'ai trouvée des informations qui indiquent
bien, qu'en terme de vitesse de la DAO est superieur a ADO.


"Sébastien" <Aucun> a écrit dans le message de news:

Salut,

je pense que DAO n'est pas très optimiser en dehor d'access ... si tu veux
avoir qq chose de plus rapide, tourne toi vers ADO.NET, mais cela


t'obligera
a reecrire une bonne partie de ton code...

a++
seb

"Fredo" a écrit dans le message de news:
eoEH%
> bonjour !
>
>
>
> je suis en train de reecrire en VB.NET une tres grande application (
> conception de pieces, generationde plans DAO, pilotage de centre


d'usinage
> et systeme d'acquisition), que j'avais écrit en VBA sous Acces.
>
>
>
> Je voulais recuperer tout la partie qui concerne la base de données, qui
> était ecrite en DAO 3.6.
>
>
>
> Si j'intègre cette bibliothèque, tout fonctionnne parfaitement, sauf la
> vitesse.
>
> En ecriture en VBA avec creation de 1000 enregistrmeents par seconde ,
> j'affiche une charge de CPU de 12%,
>
> alors qu'en VB.NET avec 80 enregistrements par sec j'affiche une charge
> CPU
> de 80%?
>
>
>
> Au secours, qui a une idée
>
>
>
> j'accède de la façon suivant a la base de données :
>
>
>
> Dim Dbe As DAO.DBEngine
>
> Dim Db As DAO.Database
>
> Dim rs As DAO.Recordset
>
> Dbe = New DAO.DBEngine
>
> Db = Dbe.OpenDatabase(cheminAccesBase)
>
> rs = Db.OpenRecordset("SELECT * MesuresPoints")
>
>
>
> j'ecris dans la base de la facon suivante
>
> rs.addnew()
>
> rs.fields("nomchamps").value=valeur
>
> rs.update
>
>
>
> si j'ecris en SQL une instruction d'ajout, c'est curieusement encore


plus
> lent
>
>
>
> qui a une idée??
>
>




Avatar
Patrice
A priori il est plus "naturel" d'utiliser ADO.NET à partir de VB.NET...

--
Patrice

"nathalie.steinhilber" a écrit dans le
message de news:
j'ai testée, c'est encore bien plus lente que la DAO, d'ailleurs dans le
fichiers d'aide du Visual Studio j'ai trouvée des informations qui


indiquent
bien, qu'en terme de vitesse de la DAO est superieur a ADO.


"Sébastien" <Aucun> a écrit dans le message de news:

> Salut,
>
> je pense que DAO n'est pas très optimiser en dehor d'access ... si tu


veux
> avoir qq chose de plus rapide, tourne toi vers ADO.NET, mais cela
t'obligera
> a reecrire une bonne partie de ton code...
>
> a++
> seb
>
> "Fredo" a écrit dans le message de news:
> eoEH%
> > bonjour !
> >
> >
> >
> > je suis en train de reecrire en VB.NET une tres grande application (
> > conception de pieces, generationde plans DAO, pilotage de centre
d'usinage
> > et systeme d'acquisition), que j'avais écrit en VBA sous Acces.
> >
> >
> >
> > Je voulais recuperer tout la partie qui concerne la base de données,


qui
> > était ecrite en DAO 3.6.
> >
> >
> >
> > Si j'intègre cette bibliothèque, tout fonctionnne parfaitement, sauf


la
> > vitesse.
> >
> > En ecriture en VBA avec creation de 1000 enregistrmeents par seconde


,
> > j'affiche une charge de CPU de 12%,
> >
> > alors qu'en VB.NET avec 80 enregistrements par sec j'affiche une


charge
> > CPU
> > de 80%?
> >
> >
> >
> > Au secours, qui a une idée
> >
> >
> >
> > j'accède de la façon suivant a la base de données :
> >
> >
> >
> > Dim Dbe As DAO.DBEngine
> >
> > Dim Db As DAO.Database
> >
> > Dim rs As DAO.Recordset
> >
> > Dbe = New DAO.DBEngine
> >
> > Db = Dbe.OpenDatabase(cheminAccesBase)
> >
> > rs = Db.OpenRecordset("SELECT * MesuresPoints")
> >
> >
> >
> > j'ecris dans la base de la facon suivante
> >
> > rs.addnew()
> >
> > rs.fields("nomchamps").value=valeur
> >
> > rs.update
> >
> >
> >
> > si j'ecris en SQL une instruction d'ajout, c'est curieusement encore
plus
> > lent
> >
> >
> >
> > qui a une idée??
> >
> >
>
>




Avatar
nathalie.steinhilber
oui, mais c'est encore plus lent que la DAO!!

ça se trouve, il est impossible d'etre aussi rapide que la DAO qui tourne en
VBA.

en VBA, creer 1000 enregistrments par sec dans une table avec 18 champs cree
seulement une charge CPU de environ 10%

alors en VBNET et DAO je plafonne a 250 enregistrments par sec a 100% CPU

et en ADO 100 enreg/sec a 100% CPU

curieux, je suis partie pour VBNET pour etre plus performant, et c'est le
contraire ????


"Patrice" a écrit dans le message de news:

A priori il est plus "naturel" d'utiliser ADO.NET à partir de VB.NET...

--
Patrice

"nathalie.steinhilber" a écrit dans le
message de news:
> j'ai testée, c'est encore bien plus lente que la DAO, d'ailleurs dans le
> fichiers d'aide du Visual Studio j'ai trouvée des informations qui
indiquent
> bien, qu'en terme de vitesse de la DAO est superieur a ADO.
>
>
> "Sébastien" <Aucun> a écrit dans le message de news:
>
> > Salut,
> >
> > je pense que DAO n'est pas très optimiser en dehor d'access ... si tu
veux
> > avoir qq chose de plus rapide, tourne toi vers ADO.NET, mais cela
> t'obligera
> > a reecrire une bonne partie de ton code...
> >
> > a++
> > seb
> >
> > "Fredo" a écrit dans le message de news:
> > eoEH%
> > > bonjour !
> > >
> > >
> > >
> > > je suis en train de reecrire en VB.NET une tres grande application (
> > > conception de pieces, generationde plans DAO, pilotage de centre
> d'usinage
> > > et systeme d'acquisition), que j'avais écrit en VBA sous Acces.
> > >
> > >
> > >
> > > Je voulais recuperer tout la partie qui concerne la base de données,
qui
> > > était ecrite en DAO 3.6.
> > >
> > >
> > >
> > > Si j'intègre cette bibliothèque, tout fonctionnne parfaitement, sauf
la
> > > vitesse.
> > >
> > > En ecriture en VBA avec creation de 1000 enregistrmeents par


seconde
,
> > > j'affiche une charge de CPU de 12%,
> > >
> > > alors qu'en VB.NET avec 80 enregistrements par sec j'affiche une
charge
> > > CPU
> > > de 80%?
> > >
> > >
> > >
> > > Au secours, qui a une idée
> > >
> > >
> > >
> > > j'accède de la façon suivant a la base de données :
> > >
> > >
> > >
> > > Dim Dbe As DAO.DBEngine
> > >
> > > Dim Db As DAO.Database
> > >
> > > Dim rs As DAO.Recordset
> > >
> > > Dbe = New DAO.DBEngine
> > >
> > > Db = Dbe.OpenDatabase(cheminAccesBase)
> > >
> > > rs = Db.OpenRecordset("SELECT * MesuresPoints")
> > >
> > >
> > >
> > > j'ecris dans la base de la facon suivante
> > >
> > > rs.addnew()
> > >
> > > rs.fields("nomchamps").value=valeur
> > >
> > > rs.update
> > >
> > >
> > >
> > > si j'ecris en SQL une instruction d'ajout, c'est curieusement encore
> plus
> > > lent
> > >
> > >
> > >
> > > qui a une idée??
> > >
> > >
> >
> >
>
>




Avatar
Patrice
Quelle version de Access/Jet ?

DAO travaille effectivement sans doute directement sur le fichier Access
alors que ADO est plus indépendant de la base et traverse des couches
supplémentaires.

Eventuellement un exemple le plus simple possible de code pourrait peut-être
permettre de confirmer ou pas ce problème sur d'autres machines...

Si les performances sont déterminantes, je ne verrais alors que soit garder
DAO, soit voir ce que donne MSDE ou SQL Server Express si c'est une
possibilité qui t'est ouverte...

--
Patrice

"nathalie.steinhilber" a écrit dans le
message de news:O%
oui, mais c'est encore plus lent que la DAO!!

ça se trouve, il est impossible d'etre aussi rapide que la DAO qui tourne


en
VBA.

en VBA, creer 1000 enregistrments par sec dans une table avec 18 champs


cree
seulement une charge CPU de environ 10%

alors en VBNET et DAO je plafonne a 250 enregistrments par sec a 100% CPU

et en ADO 100 enreg/sec a 100% CPU

curieux, je suis partie pour VBNET pour etre plus performant, et c'est le
contraire ????


"Patrice" a écrit dans le message de news:

> A priori il est plus "naturel" d'utiliser ADO.NET à partir de VB.NET...
>
> --
> Patrice
>
> "nathalie.steinhilber" a écrit dans le
> message de news:
> > j'ai testée, c'est encore bien plus lente que la DAO, d'ailleurs dans


le
> > fichiers d'aide du Visual Studio j'ai trouvée des informations qui
> indiquent
> > bien, qu'en terme de vitesse de la DAO est superieur a ADO.
> >
> >
> > "Sébastien" <Aucun> a écrit dans le message de news:
> >
> > > Salut,
> > >
> > > je pense que DAO n'est pas très optimiser en dehor d'access ... si


tu
> veux
> > > avoir qq chose de plus rapide, tourne toi vers ADO.NET, mais cela
> > t'obligera
> > > a reecrire une bonne partie de ton code...
> > >
> > > a++
> > > seb
> > >
> > > "Fredo" a écrit dans le message de news:
> > > eoEH%
> > > > bonjour !
> > > >
> > > >
> > > >
> > > > je suis en train de reecrire en VB.NET une tres grande application


(
> > > > conception de pieces, generationde plans DAO, pilotage de centre
> > d'usinage
> > > > et systeme d'acquisition), que j'avais écrit en VBA sous Acces.
> > > >
> > > >
> > > >
> > > > Je voulais recuperer tout la partie qui concerne la base de


données,
> qui
> > > > était ecrite en DAO 3.6.
> > > >
> > > >
> > > >
> > > > Si j'intègre cette bibliothèque, tout fonctionnne parfaitement,


sauf
> la
> > > > vitesse.
> > > >
> > > > En ecriture en VBA avec creation de 1000 enregistrmeents par
seconde
> ,
> > > > j'affiche une charge de CPU de 12%,
> > > >
> > > > alors qu'en VB.NET avec 80 enregistrements par sec j'affiche une
> charge
> > > > CPU
> > > > de 80%?
> > > >
> > > >
> > > >
> > > > Au secours, qui a une idée
> > > >
> > > >
> > > >
> > > > j'accède de la façon suivant a la base de données :
> > > >
> > > >
> > > >
> > > > Dim Dbe As DAO.DBEngine
> > > >
> > > > Dim Db As DAO.Database
> > > >
> > > > Dim rs As DAO.Recordset
> > > >
> > > > Dbe = New DAO.DBEngine
> > > >
> > > > Db = Dbe.OpenDatabase(cheminAccesBase)
> > > >
> > > > rs = Db.OpenRecordset("SELECT * MesuresPoints")
> > > >
> > > >
> > > >
> > > > j'ecris dans la base de la facon suivante
> > > >
> > > > rs.addnew()
> > > >
> > > > rs.fields("nomchamps").value=valeur
> > > >
> > > > rs.update
> > > >
> > > >
> > > >
> > > > si j'ecris en SQL une instruction d'ajout, c'est curieusement


encore
> > plus
> > > > lent
> > > >
> > > >
> > > >
> > > > qui a une idée??
> > > >
> > > >
> > >
> > >
> >
> >
>
>