Pb perf VB

Résolu
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 10 déc. 2007 à 15:05
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 19 déc. 2007 à 10:32
Bonjour !
alors voila mon souci :
appli VB.net qui ouvre une pelletée de fichiers excel (une petite quizaine) pour y lire des données user (non modifiables en cours d'exe)

(à terme y aura du beau oracle à la place, mais pour le moment, c'est pas possible, donc vieux fichiers excel)

mon souci :
tout marche bien, pendant quelques minutes, mais après unmoment, j'ai par exemple un richtextbox qui vient se placer tout en haut à gauche de mon écran, et puis tout plante. En fait, retour au debbuggeur, avec des erreur genre outofspacememory, ou un autre qui y ressemble.

Bref, ma question avez vous deja eut ce pb de rtextbox qui se balade (l'affichage devient tout moche, avec des bouts de fenetres qui se dépalcent sur l'écran, on a tous deja vu ca dans d'autres applis. Mais si, quand vous voyez la moitié d'une fenetre, et la moitié d'une autre, en cliquant sur l'une ou l'autre, l'afficahge redevient normal)

dans ce prg j'utilise ==> de l'interfacage excel au grand complet, mais je pense pas que cela soit ca
en revanche, je lit les pixels à l'écran, je bouge la souris, fait des clic, ecrit du texte en pilotant clavier et souris

il y a sur ce site un prg appelé getpixel, qui fait exactement la meme erreur. si vous le lancez au bout de 10 minutes, il part en sucette, et un des champ du form vientse mettre en haut à gauche.

piste : le deboggeur ! j'ai remarqué que mon prg marche bien mieux en lancant directement l'exe, et non depuis vb (vbexpress d'ailleurs), mais puisque ce pb apparait de facon sporadique, je peux apss assurer que sans déboggueur ca marche.

Merci de votre aide, ca me panade pas mal cette betise là !

dernière chose :::: doevents
j'en avait mis quelques uns à des endroits qui me semblaient logiques.
mais, j'ai du tous les virer parceque de temps en temps j'aais du out of stack memory error, et ca plantait sur un doevents,
en les virant le pb est résolu. peut etre ca vient de là, mais alors, par quoi remplacer ce satané doevents ?

enfin, mon code est très long, mais simplissime.

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 déc. 2007 à 16:33
surement une fuite mémoire.... je parierai pour un GetDc qui n'aurait pas son ReleaseDc en face...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
10 déc. 2007 à 16:59
j'essaie de suite, et direct je te dit que ca sent bon !!!
ca expliquerait pourquoi mon petite appli getpixel plante de la meme manière (j'ai du pomper un peu vite ;))

effectivement, j'ai dans mon code un
    ' Retourne l'identifiant du contexte graphique d'une fenêtre
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Integer) As Integer

il me faut faire un releaseDC après  chaque appel à getDC???

j'ai effectivement aucun releaseDC  dans mon code... je pensais que get DC renvoyait juste un pointer, pas tout une tripotée de cochonneries à nettoyer !
bien envie d'accepter ta réponse de suite, mais je vais vérifier avant ;), le pb étant que c'est du sporadique, donc si ca reproduit pas, ca voudra pas forcément dire que ...
 mais c bien logique en tout cas, un grand MERCI !!!
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
10 déc. 2007 à 20:02
c bon ca a l'air de bien mieux rouler
encore merci
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
10 déc. 2007 à 23:46
0

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

Posez votre question
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
18 déc. 2007 à 16:10
euh, j'ai le emme problème qui se présente à nouveau.
le releasedc à bien retardé le souci, mais il reste présent ...
aurais tu d'autres idées de fuites mémoires ?
j'ai un peu cherché je vois rien ...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 déc. 2007 à 23:51
ajoutes la colonne GDI Object dans le gestionnaire de taches (Ctrl+Alt+Supp)

histoire de tirer cela au clair...

surement un soucis de DeleteObject ou DeleteDc
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
19 déc. 2007 à 10:32
décidement !
tu as vraiment des intuitions incroyables !
j'ai effectivement des GDIS qui augmùentent régulièrement.

en cherchant, mon fuc... release marche pas,

chaque appel à ca :
        Dim hdc As Int32
        hdc = GetDC(Cuore.Handle)
        ' Pixel (X,Y) de l'écran (hwnd = 0)
        '      RGBPx = GetPixel(hdc, X, Y)
        '      'ReleaseDC(Cuore.Handle, hdc)
        If ReleaseDC(Cuore.Handle, hdc) = 0 Then
            Debug.Print("erreur libération du DC 0 dans CurPixelColor")
        End If
        hdc = Nothing

crée un gdi de plus

le releasedc renvoi pourtant bien > 0

alors certes, il suffit que je mette ce hdc en var globale, que j'appele une seule fois getdc, mais c sale, et j'aimerais bien comprendre !!!!

en tout cas un grand merci, car quoi qu'il en soit, j'ai plus de fuite ...
0
Rejoignez-nous