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

Windows Forms Discussion :

[VB2005 & SQL SERVER] récupération d'une grande quantité de données


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut [VB2005 & SQL SERVER] récupération d'une grande quantité de données
    Bonjour à tous.

    Une question technique pour changer ^^.

    Je fais une petite requête sur un DB de type sql server. Jusqu'à là, pas de soucis, connexion ok et récupération des données ok.

    Il s'agit d'une table de plusieurs millions de records avec une bonne 15aine de champs. Ce sont en fait des transactions caisse de magasins...

    Tant que ma requête porte sur un petit intervalle de temps avec un nombre restreint de champs, pas de soucis. Il faut parfois attendre un peu mais ça passe, un backgroundworker, une ptite boule qui tourne et j'suis content.

    Le problème est que j'ai besoin de pouvoir effectuer une requête sur plusieurs moi qui doit récupérer tous les champs.

    Donc ma connexion fonctionne, mon backgroundworker et ma p'tite boule tournent bien mais au bout d'un temps, la p'tite boule se bloque, redémarrer qqes temps puis s'arrête de nouveau.

    J'ai été voir dans le Task Manager... Dans la colonne "Mem Usage", la valeur oscille autour de 700.000K et retombe parfois en dessous de 100.000K pour remonter quelques secondes plus tard à 800.000K et ainsi de suite.

    N'y connaissant rien là dedans, je m'interroge. Est-ce que je manque de mémoire virtuelle pour récupérer les données ? Est-ce la requête prend trop de temps ? Est-ce le programme "travaille" encore ? (cela sembre être le cas)

    Pouvez-vous me conseiller ?

    Merci d'avance.

    Griftou.

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Du neuf !

    Je viens d'avoir le message fatidique de windows "You system is to low on virtual memory...". C'est donc bien un problème de ram. Sachant que j'ai absolument besoin de pouvoir faire cette requête, y a-t-il un moyen de contourner le problème ?

    J'ai déjà pensé à diviser la requête en requêtes portant sur une période plus réduite mais bon... cela semble assez casse gueule.

    J'espère que quelqu'un aura une idée. Moi à part ajouter de la ram (et encore... il en faudrait combien ? ), j'vois pas.

    Griftou.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    Peut-etre une piste :

    il te faut à mon sens améliorer ta requête SQL en indexant correctement la base de données.
    Regarde donc du coté optimisation du requetage.

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ce n'est pas un problème de performance au niveau vitesse ^^.

    Le souci est que la quantité de données récupérées est trop importante pour pouvoir être gêrée d'un bloc.

    Finalement, ayant la date sous forme YYYYMMDD, je me suis pensé sur une boucle qui exécute une requête pour chaque jour compris dans l'intervalle.

    Je suis encore en train d'analyser le tout et d'écrire le lda mais j'ai opté pour un système avec 3 threads. Un premier qui récupère les données dans un dataset, un second qui les transfères dans un dataset de travail et un troisième qui traite les données se trouvant dans la variable de travaille pendant que le premier recharge une nouvelle série des données dans le premier dataset.

    Ainsi je gagne de la mémoire et à mon avis, également du temps de traitement puisque des données peuvent être traîtées pendant que la suite est encore en train d'être récupérées.

    J'vous tiens au courant pour savoir si ça marche ^^.

    Griftou.

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    à tous !

    Alors voilà, lda et codage terminés !

    Je veux tester et là, plantage

    Dans mon thread 1 je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    While thread2.isAlive
    End While
     
    ...récupération des données...
     
    thread2.start
    Je pense être en droit de m'attendre à ce qu'il ne lance le thread 2 que lorsqu'il n'est plus en train d'effectuer un quelconque traitement non ?

    Mais j'obtiens l'erreur suivante :

    Thread is running or terminated; it cannot restart.
    A priori je dirais qu'il n'est pas "running" puisque j'attends que "isAlive" soit faux. Donc il reste le terminated mais.... ????????

    J'ai regardé dans la msdn mais j'avoue ne pas avoir vu grand chose qui pourrait m'aider... Ou alors j'ai pas compris

    Donc s'il vous plait... HELP !


    Merci d'avance.

    Griftou.

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut multi thread
    Cette idee d optimisation a l air pas mal du tout... Du coup je pourrai en avoir surement besoin...

    Si tu pouvais nous tenir au courant quand ca marchera...

    Sinon je ne suis pas un pro du multi thread....

    Mais... pourquoi ne pas essayer de voir ce qui ce passe...

    Genre tu te mets un petit msgbox pour l evenement ou le thread s arrete... tu seras vite fixer pour ce probleme la...

    Sinon es ce que tu pourrais montrer la progression du process grace a une progress bar ou un truc comme ca... Tu pourrais suivre en ligne

    (Desole pour la ponctuation, qwerty)

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

Discussions similaires

  1. Envoyer une grande quantité de données dans un xml via http
    Par qdaemon_fr dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 03/03/2009, 09h51
  2. Manipulation d'une grande quantité de données
    Par sebastyen dans le forum Langage
    Réponses: 1
    Dernier message: 10/11/2008, 15h54
  3. Réponses: 2
    Dernier message: 08/04/2008, 19h11
  4. Une grande quantité de données sur Oracle 8i?
    Par bliml dans le forum Oracle
    Réponses: 13
    Dernier message: 01/03/2007, 11h45
  5. Réponses: 1
    Dernier message: 10/01/2007, 15h52

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