Bonjour à tous,
Je viens vers vous pour savoir s'il était possible de libérer une variable (vider son contenu) ?
Car j'ai un petit problème de mémoire sur un programme qui doit rechercher des images dans un dossier spécifique, voici le code :
Donc je lance cette procédure au démarrage de mon programme, elle permet de rechercher dans un dossier "Tiles" les image de format .png.
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 Private Sub ChargementTiles() ' Déclaration des variables Dim sImageTrouve() As String Dim sCheminTiles As String = Application.StartupPath & "\Tiles" Dim sFormatImage As String = "*.png" Dim sNomTiles As String Dim MonImage As System.Drawing.Bitmap Dim TailleX, TailleY As Integer ' Vider la liste déroulante Me.COMBO_TILES.Items.Clear() ' On parcourt le dossier des Tiles sImageTrouve = Directory.GetFileSystemEntries(sCheminTiles, sFormatImage) For Each ListeImage As String In sImageTrouve ' Ajout du nom du Tiles dans la liste déroulante sNomTiles = Mid(ListeImage, sCheminTiles.Length + 2) Me.COMBO_TILES.Items.Add(sNomTiles) ' On récupére la taille de l'image MonImage = New System.Drawing.Bitmap(ListeImage) TailleX = MonImage.Width TailleY = MonImage.Height ' Ajout dans la liste des Tiles Dim Tiles As New ClassTiles(sNomTiles, ListeImage, TailleX, TailleY) Me.ListeTiles.Add(Tiles) Next ' Vérifier si des tiles ont été trouvé If sImageTrouve.Count = 0 Then MsgBox("Aucun Tiles n'a été trouvé dans " & sCheminTiles & ".", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Tiles non trouvés.") Application.Exit() Else ' On sélection le premier Tiles dans la combobox Me.COMBO_TILES.SelectedIndex = 0 End If End Sub
Puis dans une classe nommé ClassTiles, je stock le chemin de l'image, sa taille et son nom.
En déboguant pas à pas, je me suis rendu compte que c'était la variable "MonImage", que j'utilise pour charger l'image en mémoire afin de récupérer sa taille, qui cumule la taille de l'image à chaque boucle.
Du coup si j'ai beaucoup d'image à rechercher, à l'ouverture, l'application pése déjà + de 100 mo...
Puis si je la réduis et la maximise, elle perd toutes sa mémoire et descend à 20 mo (surement du au Garbadge collector ?)
Du coup je voulais "vider" ma variable "MonImage" à chaque boucle en faisant :
Mais ça ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part MonImage = Nothing
Vous avez une idée sur la manière de procédé ?
J'ai peut être mal pensé la récupération des images ?
Surtout que je pensais que les variables étaient détruites après que les procédures soient terminées...
Je vous remercie d'avance pour vos conseils.
Bonne journée!
Cryo






Répondre avec citation






Pas de questions techniques par MP ! Le forum est là pour ça...
Partager