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

WinDev Discussion :

Table en programmation - lenteurs [WD23]


Sujet :

WinDev

  1. #1
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : mai 2015
    Messages : 138
    Points : 267
    Points
    267
    Par défaut Table en programmation - lenteurs
    Bonjour à Tous,

    Peut-être pourriez vous m'éclairer. Contexte :

    base HyperfileSQL classic
    base sur un drive réseau
    application client sur pc
    Table chargé en programmation.
    Fichier contenant un peu plus de 100K d'enregistrements
    moins de 10 utilisateurs connectés

    la moitié des utilisateurs sont dans le lan et l'autre moitié sur un site distant connecté au lan via un vpn.

    C'est une petite appli modeste devant servir au besoin de 2 utilisateurs. la table était alors lié à la base hyperfile.
    Puis assez rapidement d'autres utilisateurs ont manifesté leur intérêt pour cette application. Bien entendu des demandes de modification sont rapidement apparues.
    L'une d'elle étant le tri des colonnes. A ce moment la les performances étaient tout à fait correctes.

    Pour pouvoir avoir plus de possibilités, je suis passé d'une table lié à un fichier hyperfile à une table remplie par programmation.
    Ceux qui sont directement sur le lan ont toujours un chargement de la table qui se fait en quelques secondes. Par contre ceux qui sont connectés via le VPN doivent attendre 10 minutes
    avant que la table s'affiche...

    Mon premier chargement était fait avec un hlitpremier...
    Mon deuxième avec un pour tout
    et hier j'ai tenté ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    reqadr est une Source de Données
    HExécuteRequêteSQL(reqadr,"select * from adrdna")
     
    POUR TOUT reqadr SUR IDadrdna
    	TableAjouteLigne(Table_adrdna,reqadr.IDadrdna,reqadr.ADR_GEOPOST_ID,reqadr.Rue,reqadr.Rue_no...
    		,reqadr.NPA_4POS,reqadr.Localite,reqadr.Secteur,reqadr.Canton,reqadr.MENAGES_BRUTS...
    		,reqadr.AUTOCOLLANTS,reqadr.MENAGES_NETS,reqadr.MENAGES_VILLAS,reqadr.code_portes,reqadr.code_portesterrain...
    		,reqadr.cletri_table)
    FIN
    Si quelqu'un aurait une idée à me suggérer je le remercie par avance.
    *IDadrdna est un identifiant automatique

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 721
    Points : 11 346
    Points
    11 346
    Par défaut
    Bonjour,
    Une table fichier est chargée "à la demande", donc seuls les enregistrements affichés sont récupérés.
    Dans le cas d'une table mémoire (remplie par prorgammation), tu vas récupérer d'une traite toutes les données.
    Ce n'est pas trop grave sur un LAN, mais avec une connexion distante le chargement sera bien plus long à cause d'un débit réseau bien plus faible, et une latence plus élevée.

    D'autre par, avec un "base" HF classique, c'est l'application qui filtre les enregistrements. Donc si elle doit lire l'intégralité d'un index, voir l'intégralité du fichier pour trouver ses données, l'impact sur l'application sera bien plus important avec un accès distant (toujours à cause du débit et de la latence).

    Pour cette partie tu peux diminuer l'impact en passant en client/serveur (c'est le serveur qui s'occupera de la requête), mais avec une table mémoire tu auras quoi qu'il en soit des problèmes de temps de chargement.

    Tatayo.

  3. #3
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 090
    Points : 3 644
    Points
    3 644
    Par défaut
    Bonjour,
    3 méthodes possibles (qui peuvent être combinées)
    1-Remplissage par variable via un tableau de classe (mappée si possible)
    2-Filtre en amont
    3-Utilisation de la propriété AffichageActif sur ton champ table
    Il y a peut être plus simple, mais ça tourne

  4. #4
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : mai 2015
    Messages : 138
    Points : 267
    Points
    267
    Par défaut
    Bonjour,

    Tout d'abord merci pour vos réponses,

    Une table fichier est chargée "à la demande", donc seuls les enregistrements affichés sont récupérés.
    Dans le cas d'une table mémoire (remplie par prorgammation), tu vas récupérer d'une traite toutes les données.
    Ce n'est pas trop grave sur un LAN, mais avec une connexion distante le chargement sera bien plus long à cause d'un débit réseau bien plus faible, et une latence plus élevée.

    D'autre par, avec un "base" HF classique, c'est l'application qui filtre les enregistrements. Donc si elle doit lire l'intégralité d'un index, voir l'intégralité du fichier pour trouver ses données, l'impact sur l'application sera bien plus important avec un accès distant (toujours à cause du débit et de la latence).

    Pour cette partie tu peux diminuer l'impact en passant en client/serveur (c'est le serveur qui s'occupera de la requête), mais avec une table mémoire tu auras quoi qu'il en soit des problèmes de temps de chargement.

    Tatayo.


    Clair et limpide

    Bonjour,
    3 méthodes possibles (qui peuvent être combinées)
    1-Remplissage par variable via un tableau de classe (mappée si possible)
    2-Filtre en amont
    3-Utilisation de la propriété AffichageActif sur ton champ table


    J'ai tenté l'affichageActif mais le résultat n'a pas été probant
    La première méthode m'a l'air intéressante mais je t'avoue qu'il faut que je me documente sur ça avant
    Le filtre en amont, pardon si ma question est stupide, c'est quoi ?


    Pour finir je suis revenu à une table fichier pour ceux en connexion vpn

  5. #5
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 090
    Points : 3 644
    Points
    3 644
    Par défaut
    Citation Envoyé par rudolfrudolf Voir le message
    Le filtre en amont, pardon si ma question est stupide, c'est quoi ?
    Au lieu d'afficher l'ensemble des tuples de la requête puis de sélectionner les conditions du filtre, l'utilisateur sélectionne les paramètres du filtre (e.g. les clients antérieurs à une date donnée,) ces paramètre sont passé à la requête et seul les résultats désirés sont affichés.

    La première méthode a en effet l'avantage d'éviter la boucle d'affichage (comme une table sur fichier) en laissant la possibilité de filtrer sur les colonne (comme une table mémoire) sans que la rubrique soit indexée. En contrepartie, elle peut se révéler gourmande en mémoire.
    Il y a peut être plus simple, mais ça tourne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lenteur remplissage table par programmation (C/S)
    Par Phoenix311 dans le forum WinDev
    Réponses: 5
    Dernier message: 04/04/2014, 09h30
  2. comment ajouter un champ au table par programme delphi
    Par mechatikhaled dans le forum Débuter
    Réponses: 2
    Dernier message: 22/12/2008, 09h55
  3. creer une table par programmation
    Par stefano dans le forum WinDev
    Réponses: 3
    Dernier message: 22/12/2007, 12h57
  4. filtrer une table par programmation
    Par programeur dans le forum Delphi
    Réponses: 2
    Dernier message: 11/01/2007, 13h38
  5. Attacher les tables par programmation
    Par ahouba dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/05/2006, 19h29

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