IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modélisation Discussion :

temps de réponse lors d'accès itératifs a une table


Sujet :

Modélisation

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut temps de réponse lors d'accès itératifs a une table
    Bonjour,

    Je dispose dans le cadre d'un appli. Access d'une table d'activité (Oui/Non) par date sur une longue période (5 ans) soit environ 2000 enregistrements.

    Un nombre important de calculs (dont certains sont dans de grandes boucles itératives) font appel à l'activité pour une date donnée au sein de code VBA.

    Option simple:
    fonctions de domaine: lent (environ 20s pour checker le statut de 1000 dates)

    Option un peu plus élaborée:
    A base de DAO,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim rst as dao.recordset
    rst=currentdb.openrecordset("texte requête SQL sur la table d'activité", dbOpenSnapshot)
    Le temps de réponse est amelioré (environ 10s pour checker le statut de 1000 dates)

    Existe-il d'autres options qui seraient plus performantes?

    En vous remerciant par avance

    Christophe

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 768
    Points : 58 092
    Points
    58 092
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Citation Envoyé par rspyo Voir le message
    ...environ 10s pour checker le statut de 1000 dates
    ça me parait énorme, qu'entends-tu par "checker" ?
    tu es en environnement multi-utilisateurs ?

    sinon, regarde dans ce tutoriel: Guide d'optimisation de vos applications Microsoft ACCESS

    tu peux peut-être optimiser la requête: III-E. Requêtes

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut quelques détails
    Merci,

    Je vais essayer d'être plus précis car je pense faire quelque part une grossière erreur de conception...

    i.) les 10s de temps de réponse sont avec frontale/dorsale
    cela devient 2s si une seule base

    ii.) "checker": une boucle théorique pour 1000 dates afin de mesurer le temps de réponse

    iii.) description détaillée

    a) table: "tbl ActiviTest"
    deux champs: Date (type Date) Actif (type Boolean), table indexée sans doublons
    environ 150 enregistrements avec des dates comprises entre 2010/2014

    b) fonction "JourActif" qui interroge la table et renvoie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function JourActif(dtDate As Date) As Boolean
    Dim source As String
    Dim Record As DAO.Recordset
     
        source = "SELECT [tbl ActiviTest].Actif FROM [tbl ActiviTest]WHERE Date=" & USDate_SQL(dtDate)
        Set Record = CurrentDb.OpenRecordset(source, dbOpenSnapshot)
                If Record.RecordCount < 1 Then
                        JourActif = False
                Else
                        JourActif = Record.Fields("Actif")
                End If
     
        Record.Close
        Set Record = Nothing
     
    End Function
    c) routine de test pour itérer 1000 appels successifs à « JourActif »

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Public Sub Test()
    Dim dt As Date
    Dim dtvar As Double
    Dim i As Integer
     
    dt = DateSerial(2010, 1, 6)
    dtvar = CDbl(dt)
     
    sngDebut = VBA.DateTime.Timer
     
    ' boucle theéorique pour appeler 1000 fois la fonction "JourActif"
     
    For i = 1 To 1000
        JourActif (CDate(dtvar))
        dtvar = dtvar + 1
    Next i
     
    MsgBox "Temps d'execution : " & Str(VBA.DateTime.Timer - sngDebut) & " secondes"
     
    End Sub
    Voila, rien de fracassant mais je suppose que la pauvre performance à a voir avec la creation iterative du recordset. Ceci étant, je n'ai pas d'idée d'approche alternative.

    En vous remerciant par avance.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 370
    Points
    34 370
    Par défaut
    salut,
    et en utilisant une fonction de domaine, ne va-t-on pas plus vite ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function JourActif(dtDate As Date) As Boolean
    JourActif = Nz(Dlookup("Actif","[tbl ActiviTest]","[tbl ActiviTest]=" & USDate_SQL(dtDate)),False)
    End Function

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Tu as raison pour la fonction de domaine. Toute chose étant égale par ailleurs, pour 1000 itérations, je passe de 2s à 0.6s.

    C'est un bon début. Merci.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Par contre toujours aussi lent lorsque la table est déportée dans la dorsale.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 370
    Points
    34 370
    Par défaut
    Pour la dorsale,
    faire une copie dans une table locale en amont du traitement peut-être ?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    c'est la conclusion à laquelle j'étais arrivé, et dans ce cas la performance est raisonnable mais c'est un peu frustrant...
    même si la bouzigue est ok en l'état, je suis preneur de toute piste d'amélioration.
    merci pour le support.

Discussions similaires

  1. [Flex4] Aucune réponse lors de l'appel d'une méthode
    Par agage dans le forum Flex
    Réponses: 1
    Dernier message: 12/09/2012, 11h58
  2. Réponses: 7
    Dernier message: 16/05/2012, 11h13
  3. Temps incroyablement long lors de la création d'une socket
    Par 0x44-0x43-0x53-0x43 dans le forum Web & réseau
    Réponses: 1
    Dernier message: 13/01/2012, 10h37
  4. Temps de réponse lors du lancement d'applications
    Par jproto dans le forum Langage
    Réponses: 6
    Dernier message: 27/09/2006, 11h58
  5. Erreur lors de l'ajout d'une table
    Par FredMines dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/07/2005, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo