Nous avons remarqué un problème intéressant concernant la gestion de la mémoire dans VB que nous ne comprenons pas. Si quelqu'un peut nous aider avec celui-ci, s'il vous plaît faire.Fuite de mémoire dans VB
Nous avons une classe simple avec un seul événement. Nous créons et détruisons 5000 instances de cette classe et avant d'exécuter un test, nous lisons l'utilisation de la mémoire de processus. À la fin, nous forçons GC et vérifions à nouveau la mémoire. Ce que nous avons remarqué, c'est que nous avons une mémoire constante qui grandit. Nous avons fait le même exemple en C# et nous n'avons pas rencontré ce problème. Maintenant, voici le point filaire. Si nous omettons la déclaration d'événement de la classe, la mémoire sera nettoyée comme prévu. Est-ce que quelqu'un sait pourquoi, et quelle est la bonne façon de finaliser cette classe.
Voici l'exemple de code:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim memorySize As Long
memorySize = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64
Console.Out.WriteLine(System.Diagnostics.Process.GetCurrentProcess().WorkingSet64/(1024.0 * 1024.0))
For index As Integer = 1 To 5000
Dim x As New TestClass()
x = Nothing
Me.Text = index.ToString()
Next
GC.Collect()
Console.Out.WriteLine(System.Diagnostics.Process.GetCurrentProcess().WorkingSet64/(1024.0 * 1024.0))
Console.Out.WriteLine("delta: " + ((System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 - memorySize)/(1024.0)).ToString() + " kb")
End Sub
End Class
et classe de test:
Imports System.ComponentModel
Imports System.ComponentModel.Design.Serialization
Imports System.Xml
Imports System.Xml.XPath
Public Class TestClass
Friend Event ForeColorChanged()
Public Sub New()
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub
End Class
Et l'impression après plusieurs séries:
22,76953125
23,828125
delta: 2016 kb
24,08984375
24,0625
delta: 228 kb
24,4375
24,2109375
delta: 24 kb
24,58984375
24,83984375
delta: 384 kb
24,84375
24,890625
delta: 48 kb
Oui désolé à ce sujet. J'ai enlevé cette ligne. Mais oui, vous avez raison. c'est un bug. J'ai mis à l'optimisation et à l'optimisation du code et la gestion de la mémoire est correcte maintenant. Merci pour votre réponse. – Gico