locked
Problème: manque de memoire mon application sur WindowsCE RRS feed

  • Question

  •  

    Bonjour tout le monde

    J’ai un problème de gestion de mémoire sur Windows CE

    J’ai écrit une application smart device sur Visual studio 2005

    Avec SQL server compact et Franson bluetooth

    L’application fonctionne mais après 4, 5,6 minutes elle plante

    Je suppose que c’est un problème de mémoire parce qu`elle fonctionne

    Sur mon ordinateur,

    Ma question.. Comment je peux faire pour la gestion de la mémoire est-ce que ça se fait dans Platform builder?, dans mon code je ferme tous les connections a la base de données et dispose sur les command et le connections aussi, l'ebox a 256M de RAM mais dans le systeme de la machine donne 96.000 KB

    S’il vous plaît qq’un peut m’aider.

    mardi 5 août 2008 18:57

Réponses

  • Bonjour,

     

    Une application Windows CE a beaucoup moins de capacités d'adressage qu'une application XP (32 Mo contre 2 Go), elle rencontre donc ses limites beaucoup pluys tot. Maintenant si elle tourne qq minutes avant de planter il y a peut-etre une fuite mémoire. Cela peut être lié à des instances non libérées.

     

    Le blocage d'une application peut êrte lié à d'autres facteurs comme de la synchronisation de threads ou des entrées sorties.

     

    Dans tous les cas il n'y a rien à faire sous PB,  il faut contrôler le code applicatif.

     

    Cdlt,

    Thierry Joubert - THEORIS

    mercredi 6 août 2008 05:29
  • Merci beaucoup, après deux jours j’ai trouve que c’était les dll’s de Franson Bluetools qui n’étaient pas correctes et ils m’on envoyé les bons et ca fait cinq jours que l’appareil fonctionne sans arrêter.

    Bluetools.dll

    BluetoolMS.dll

     

    mercredi 13 août 2008 15:41

Toutes les réponses

  • Bonjour,

     

    Une application Windows CE a beaucoup moins de capacités d'adressage qu'une application XP (32 Mo contre 2 Go), elle rencontre donc ses limites beaucoup pluys tot. Maintenant si elle tourne qq minutes avant de planter il y a peut-etre une fuite mémoire. Cela peut être lié à des instances non libérées.

     

    Le blocage d'une application peut êrte lié à d'autres facteurs comme de la synchronisation de threads ou des entrées sorties.

     

    Dans tous les cas il n'y a rien à faire sous PB,  il faut contrôler le code applicatif.

     

    Cdlt,

    Thierry Joubert - THEORIS

    mercredi 6 août 2008 05:29
  •  

    Bonjour monsieur Thierry

    Je comprends maintenant et dans ce cas comment je peux faire pour libérer les instances?

    Parce que j’ai juste une liste que se rempli de données pour être enregistrer après dans la base de données en SQL server compact j’ai fait close et dispose chaque fois que utilisé une connection ou un command aussi j’ai m’aperçois que comment j’ai utilise aussi des instructions de Franson bluetools le programme plante quand il fait le m_network,autodiscovery=true ou l’instruction m_network.DiscoverDevicesAsync()

    ...

    Après plusieurs tests que j’ai fait, j’ai sur la ebox dans le System Properties

    PROGRAM MEMORY 47.548KB TOTAL

    9832KB IN USE

    C’est bizarre qu’il le manqué de mémoire exactement de 9 a 10 minutes il donne l’erreur suivante

                    Application Blue-0608.exe encountered a serious error and must shut down

    Et voila c’est tout.

    J’ai deux options maintenant parce qu’il reste faire de la statistique d’un cote de la application et s’il plante juste avec ca est-ce que se plus recommande de travailler avec Embedded XP sur ebox2300 selon votre expérience ca va marche ?

    Maintenant j’ai fait de system.GC.Collector() et j’ai prends tous les variables et les vides après que je les utilise, je ne sais pas quoi faire avec.

     

    Maintenant quand je l’exécute sur l’ordinateur :

    12 :31PM  4.752Kb

    12 :52PM  5.328KB ca veut dire que si je le laisse travailler pendant des journées il va planter quand même

     

     

    Merci beaucoup pour votre aide.

    mercredi 6 août 2008 10:01
  • Salut,

    il faut que tu analyses ton code, normalement ca se fait au fur et à mesure.
    - Chaque objet alloués doit être libérés (new / delete  ou malloc / free )
    - Attention au delete et au delete []....
    - Regarde dans les fonctions qui sont appellée régulièrement, si tu alloues des vliables en tête de la fonction, libere les en fin de fonction

    @ Si tu ne t'en sort pas, monte toi un petit "analyseur" de ressource simple composé de 1 convension et de 2 fonctions.

    * La convention: "Tu met à null toutes les pointeurs et variable libérée"

    * Fonction 1:
    Code une petite fonction qui fait juste incrémenter ou décrémenter une variable globale. Tu incrémentera ou décrémentera cette variable a chaque allocation "manuel" ou d'objet ( sizeof(obj) ). Ainsi, si à la fin d'une fonction ou  de ton programme tu constate que cette valeur est > 0, tu libères mal un truc alloué manuellement

    * Fonction 2:
    Elle prend en parameters un tableau de pointeur pour vérifier si ils sont bien nul, si tu appels cette fonction et q'un pointeur n'est pas nul, tu par en execption

    @ Derniere technique:
    Test tes fonctions indépendament, fait un "module de stresse" pour essayer de mettre en évidence la fonction problématique

    Je sait pas si je suis clair, mais trace ton code correctement

    A++

    Molux
    jeudi 7 août 2008 09:17
  • Merci beaucoup, après deux jours j’ai trouve que c’était les dll’s de Franson Bluetools qui n’étaient pas correctes et ils m’on envoyé les bons et ca fait cinq jours que l’appareil fonctionne sans arrêter.

    Bluetools.dll

    BluetoolMS.dll

     

    mercredi 13 août 2008 15:41