VB'deki bellek yönetimiyle ilgili anlamadığımız ilginç bir sorun fark ettik. Bu konuda bize yardım edebilecek biri varsa lütfen.VB'de bellek sızıntısı
Tek bir etkinliğe sahip basit bir sınıfa sahibiz. Bu sınıfın 5000 örneğini oluşturup yok ediyoruz ve bir test yapmadan önce işlem belleği kullanımını okuyoruz. Sonunda GC'yi zorluyoruz ve hafızayı tekrar kontrol ediyoruz. Fark ettiğimiz şu ki, sürekli bir hafıza büyüyoruz. Aynı örneği C# ile yaptık ve bu konuya girmedik. Şimdi burada kablolu nokta. Sınıftan etkinlik beyanı çıkarırsak, bellek beklediğimiz gibi temizlenecektir. Herhangi biri neden olduğunu biliyor ve bu dersi bitirmek için doğru yol nedir. Birkaç koşular sonrasında
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
Ve çıktı:
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
ve test sınıfı: Burada
örnek kod ben bu yazı üzerine bir cevap buldu22,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
Evet, bunun için üzgünüm. Bu çizgiyi kaldırdım. Ama evet haklısın. bu bir böcek. Ben relase ve kod optimizasyonu ayarlamak ve bellek yönetimi şimdi tamam. Cevabınız için teşekkürler. – Gico