私たちは理解できないVBのメモリ管理に関する興味深い問題に気付きました。もし誰かがこれで私たちを助けることができたら、してください。VBのメモリリーク
私たちは、単一のイベントを持つ単純なクラスを持っています。このクラスのインスタンスを5000個作成して破棄し、テストを実行する前にプロセスのメモリー使用量を読み取ります。最後にGCを強制して再びメモリをチェックします。我々が気づいたのは、一定のメモリが成長していることです。私たちはC#で同じサンプルを作成しましたが、この問題は発生しませんでした。ここに有線のポイントがあります。クラスからのイベント宣言を省略すると、予想どおりにメモリが消去されます。誰にも理由が分かり、このクラスを完成させる正しい方法は何ですか?ここで
はサンプルコードです:
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
とテストクラス:
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
そして、いくつかの実行後、プリントアウト:
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
はいごめんなさい。私はこの行を削除しました。しかし、はい、あなたは正しいです。それはバグです。私はrelaseとコードの最適化を設定し、メモリ管理は今okです。ご回答有難うございます。 – Gico