Lecteur de carte d'identité belge : Consommation excessive de mémoire

axel7851 Messages postés 6 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 1 mars 2009 - 18 juin 2008 à 14:32
axel7851 Messages postés 6 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 1 mars 2009 - 1 mars 2009 à 13:43
Salut à tous,

J'essaie actuellement de faire un programme qui détecte l'insertion d'une EiD (carte d'identité électronique BELGE dans mon cas).
Mon programme tourne parfaitement mais quelque chose me tracasse.

Lorsque l'application tourne et passe en boucle un bout de code (celui qui vérifie si oui ou non une carte est insérée), l'application consomme de plus en plus de mémoire.

J'utilise la librairie qui à été fournie avec le programme à savoir EIDLib.

Le code qui pose problème est le suivant :
<hr size="2" width="100%" />Private Sub timer_carte_inserée_Timer()
    Dim retStatus As EIDLIBCTRLLibCtl.retStatus
    Dim lhandle As Long
 
    timer_carte_inserée.Enabled = False
   
     Set retStatus = EIDlibCtrl.Init("", -1, -1, lhandle)
      
 If (retStatus.GetGeneral = 0) Then
        image_accueil.Visible = False
        chargement_donnees
        timer_chargement_carte.Enabled = True
        'message_acceuil.Caption = "Chargement des données en cours" + Chr$(13) + "Ne retirer pas votre carte"
    Else
        timer_carte_inserée.Enabled = True
    End If

    Set retStatus = EIDlibCtrl.Exit()
    EIDlibCtrl.Exit

End Sub
<hr size="2" width="100%" />Vu que cela se produit quand la carte n'est pas insérée je penses que le problème vient de " Set retStatus = EIDlibCtrl.Init("", -1, -1, lhandle)".

Voila mon problème, est que quelqu'un aurait une idée pour résoudre mon problème ???

Merci d'avance
Axel

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 juin 2008 à 19:21
Salut
Questionne le fournisseur de cette DLL afin d'être sûr du mode d'accès aux fonctions.

Il serait peut-être bon de faire une commande Exist même si le GetGeneral n'a pas retourné 0 (actuellement, le Exit n'est fait que dans le If.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
axel7851 Messages postés 6 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 1 mars 2009
19 juin 2008 à 09:30
Salut Jack et merci de ta réponse.

J'ai déjà farfouillé dans leur manuel (qui dit en passant est en anglais  ...disponible ici ), le seule moment qu'il parle d'une vidange de mémoire c'est pour une fonction dite "BEID_FlushCache" et qui est définie comme: "This function flushes the data cached in memory and on the disk" pour les non anglophites : "Cette fonction efface les données cachées dans la mémoire et sur le disque".

J'ai regardé dans le programme qu'il donne en VB. Cette fonction est présente mais elle n'est pas utilisé par l'application officielle. De plus cette application a le même défaut que mon programme... à chaque identification sa mémoire augmente 

Dés lors je penches pour un probléme propre à la OCA.

Pour le moment, la seule solution que j'ai trouvé et qui est fonctionnelle est carrément d'arreter le programme .... mais soyons clair ce n'est pas une solution trés propre ....

Pour le moment, je cherche une solution plus neutre alors si quelqu'un a une solution ... il est le bienvenu

Bonne journée à tous

Axel

http://eid.belgium.be/fr/binaries/DeveloperGuide_tcm146-17218.pdf
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 juin 2008 à 14:54
Salut
J'ai parcourru la doc.
Tu pourrais essayer d'utiliser BeginTransaction en début d'interrogation et de finir avec un EndTransaction.
Celà peut avoir une influence sur le comportement de la mémoire.
Et pourquoi pas un FlushCache ensuite, ça ne coute rien

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_jeff_montois Messages postés 7 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 1 mars 2009
1 mars 2009 à 12:47
Salut,

As-tu trouvé une solution , j'ai le problème que toi !

En gros, je dois utiliser cela dans mon Trvail de Fin d'Etudes : et même lors de la programmation de mon tfe dans l'ide
après une execution (F5) tout l'environnement de dévellopement se ferme !

???????????????????????????????

 Jeff_montois
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
axel7851 Messages postés 6 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 1 mars 2009
1 mars 2009 à 13:43
Salut Jeff_montois,

Ben côté solution, j'ai carrément crée une 2° application qui une fois lancée ferme le programme principal (celui utilisant l'EID) et pour éviter que l'application ne pompe de trop à cause d'un timer, et compte tenu qu'on utilisait un écran tactile dans le cadre de ce projet, il fallait appuyer sur l'écran pour commencer un identification. C'est le seul moyen que j'ai trouvé afin que la mémoire n'augmente pas de maniéré trop rapide.
De plus, l'extinction du programme se déroulé à 2h du mat, compte tenu que c'était pour contrôler une porte dans un école et durant les heures de cours, cela ne posé pas de problème.

Que veux tu dire par "se ferme" ? tu veux dire se plante et redémarre ??

Bon amusement,
Axel
0
Rejoignez-nous