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
Partager