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 :

1063 : Plus de mémoire disponible [WD16]


Sujet :

WinDev

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut 1063 : Plus de mémoire disponible
    Bonjour,

    J'ai une procédure qui utilise un tableau et réalise un assez gros traitement en mémoire. Auparavant cette procédure utilisait une zone mémoire, en la transformant de cette manière j'ai divisé dans certains cas de figure sa durée par plus de 10. Malheureusement j'ai un problème ...

    Chez mon client sur son serveur (Small Business Server 2003), la procédure plante rapidement avec le message suivant :

    Erreur numéro : 1063 : Plus de mémoire disponible.
    Pendant : Dimension

    Ensuite je fais un test chez le client sur un poste en XP. Même punition

    Je rapatrie la base chez moi et réalise le test sous un W8 64bits, là ça passe et ça ne m'étonne pas trop car j'avais réalisé mes tests sur ce poste.

    Ensuite chez moi je teste un XP ==> Plantage
    Toujours chez moi je teste un VISTA 32bits, 3go ==> Ca passe

    Sur tous les postes ce sont les mêmes données qui ont été brassées, j'ai surveillé la mémoire durant le traitement et je n'utilise pas plus de 150mo au total.

    Est-ce par hasard quelqu'un aurait une piste à me soumettre pour remédier à ce problème ?

    Merci

  2. #2
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    sans vouloir faire mon chiant de base : "augmenter la mémoire sur le pc de ton client"

    Il a combien en mémoire vive et combien en swap car si chez toi tu as enormement de mémoire swap çà fait pas planter la mémoire
    Emmanuel Lecoester
    => joomla addict.

  3. #3
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Sans savoir non plus ce que fait la procédure on va pas pouvoir t'aider.
    Explique nous un peu plus ce que tu fais et comment tu le fait.
    car on peux peut-être améliorer le processus.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Bonjour,

    Emmanuel je te remercie pour ta suggestion mais le swap n'est pas entamé, j'ai vérifié. Pour l'instant je suspecte un plantage lié à l'OS mais ça m'embête beaucoup.

    Je ne peux pas mettre tout le code car il y en a de trop mais la procédure en soit reste assez simple, voici ce que je fais exactement :

    Je déclare un tableau et j'appelle une procédure comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonTableau	est un tableau de 0, 2 chaînes
    MaProcedure ( MonTableau )
    Et dans la procédure je fais la chose suivante :

    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
    PROCEDURE MaProcedure ( MonTableau_ )
     
    HLitPremier ( MonFichier )
    TANTQUE PAS HEnDehors ( MonFichier )
     
    	// Constitution de la variable sCle sur 80 caractères
    	// Constitution de la variable sLigne sur 68 colonnes séparées par des TAB
     
    	nPosTableau++
    	Dimension ( MonTableau_, nPosTableau, 2 )
    	MonTableau_ [ nPosTableau, 1 ] = sCle
    	MonTableau_ [ nPosTableau, 2 ] = sLigne
     
    	HLitSuivant ( MonFichier )
    FIN
    Le plantage a lieu sur la ligne 10, après une petite minute de traitement. A ce moment le programme utilisait 70mo de mémoire environ sur un total de 150 quand la procédure est exécutée normalement.

  5. #5
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Bonjour,

    Sans être tout à fait sur de moi je dirai pour commencer que tu ne dois pas avoir cette ligne dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dimension ( MonTableau_, nPosTableau, 2 )

  6. #6
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    perso j'utiliserai tableauajouteligne (voir l'aide)
    car cette fonction te permet de ne pas utiliser dimension.

    essaie ce code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROCEDURE MaProcedure ( MonTableau_ )
     
    HLitPremier ( MonFichier )
    TANTQUE PAS HEnDehors ( MonFichier )
     
    	// Constitution de la variable sCle sur 80 caractères
    	// Constitution de la variable sLigne sur 68 colonnes séparées par des TAB
     
    	tableauajouteligne(MonTableau_ ,sCle, sLigne)
    	HLitSuivant ( MonFichier )
    FIN
    Par contre je ne comprend pas l'utilité de transformer un fichier hyperfile en variable de type tableau?

    Si vraiement tu veux utiliser dimension dans ce cas commence par calculer le nombre d’occurrence de MonFichier et utilise dimension au début de ton traitement, ainsi tu défini une seul fois la dimension de ton tableau.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  7. #7
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Et puis c'est un avis très personnel mais il est plus facile de travailler avec des objets et un tableau à une seule dimension
    au pire un tableau de structures.
    mais si c'est vraiment ton choix alors tu dois faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MonTableau_ est un tableau dynamique de 1 par 2 chaine
    HLitPremier ( MonFichier )
    TANTQUE PAS HEnDehors ( MonFichier )
    	TableauAjouteLigne(MonTableau_,sCles,sLigne)
    	HLitSuivant ( MonFichier )
    FIN

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par mail.spam Voir le message
    Bonjour,
    Par contre je ne comprend pas l'utilité de transformer un fichier hyperfile en variable de type tableau?
    En fait on ne transforme pas simplement un fichier HyperFile, sur l'ensemble des colonnes on récupère des informations liées à d'autres fichiers et des colonnes sont calculées. Une requête aurait été trop complexe, voire impossible à mettre en oeuvre, de plus le tableau est ensuite cumulé sous certaines conditions. Je ne peux d'ailleurs que constater d'excellentes performances dans ce contexte.

    Citation Envoyé par Atsibat Voir le message
    Et puis c'est un avis très personnel mais il est plus facile de travailler avec des objets et un tableau à une seule dimension
    au pire un tableau de structures.
    [/code]
    Je suis tout à fait d'accord avec toi mais là je ne fais que reprendre un programme existant et par manque de temps je l'adapte pour améliorer ses performances. Si je le réécrivais de zéro, je verrais ça sous un autre angle, c'est certain.

    Demain je vais essayer avec la fonction tableauajouteligne même si je suis un peu septique car elle redimensionne également le tableau à la volé tout comme je le fais actuellement. Sinon et comme préconisé par Sylvain, je vais essayer en le dimensionnant correctement dès le départ.

    Merci pour les tuyaux, je vous tiens au courant.

  9. #9
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Bonjour Emmanuel

    Si tout ton tableau n'est pas nécessaire pendant tout le traitement (recherche etc) je t'invite à dégager les lignes inutiles dans un txt régulièrement. Ainsi tu économisera en mémoire occupée.
    Exemple : tout les 1k lignes tu pousses le contenu du tabeau dans un txt.

    Mieux, si ce tableau à pour destination un fichier HyperFile, structures le de manière à faire ensuite un HImporteTexte pour une performance d'écriture HF inégalée de tes données importée.

    Bien à toi,

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Bonjour Romuald,

    Citation Envoyé par R&B Voir le message
    Si tout ton tableau n'est pas nécessaire pendant tout le traitement (recherche etc) je t'invite à dégager les lignes inutiles dans un txt régulièrement. Ainsi tu économisera en mémoire occupée.
    Exemple : tout les 1k lignes tu pousses le contenu du tabeau dans un txt.
    Idée intéressante, je la retiens

    Mieux, si ce tableau à pour destination un fichier HyperFile, structures le de manière à faire ensuite un HImporteTexte pour une performance d'écriture HF inégalée de tes données importée.
    En fait c'est une procédure qui exporte des données.

    Je viens donc de tester la fonction TableauAjouteLigne et là miracle ça fonctionne, je suis donc très agréablement surpris. Finalement il n'y avait pas vraiment de raison que ça ne fonctionne pas dans le contexte d'origine mais l'important c'est que ça ne dysfonctionne plus et là je dois avouer que ça me sort une bonne épine du pied.

    Merci à tous

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

Discussions similaires

  1. Avez vous une explication à la chute de la mémoire disponible ?
    Par blue dans le forum Administration système
    Réponses: 5
    Dernier message: 05/06/2007, 14h49
  2. Réponses: 1
    Dernier message: 25/05/2007, 10h38
  3. [C#]Comment allouer plus de mémoire à mon prog
    Par Yotho dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/04/2007, 11h39
  4. Réponses: 8
    Dernier message: 14/03/2007, 21h45
  5. allouer plus de mémoire
    Par fontaigo dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 05/02/2007, 16h54

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