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 :

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
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.
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.

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