SimpleButton1이라는 단추가있는 단일 Windows 폼이 있다고 가정합니다. 다음 코드는 제어 할 수없는 메모리 사용량을 초래합니다. 내가 뭘 잘못하고 있니?.NET 이벤트로 인해 제어 할 수없는 메모리 사용이 발생합니다.
나의 이해는 루프의 각 반복에서, GC는 어떤 TestClass에 객체를 정리하고, 사건의에는 핸들러가 없기 때문에뿐만 아니라 모든 관련 이벤트 돌볼 것입니다
Public Class Form1
Private Sub SimpleButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton1.Click
For i = 1 To 1000000
Dim test1 As New TestClass
Next
End Sub
End Class
Public Class TestClass
Private Event TestEvent(ByVal sender As Object)
End Class
IDisposable을 구현하고 For 루프의 모든 반복 끝에 test1.Dispose()를 호출 해 보았습니다.하지만 올바른 리소스를 삭제하지는 않았을 것으로 생각됩니다.
* ANSWERED : 코드에 문제가 없었으며 예상대로 실행되었습니다. 문제는 디버그 모드에서 실행 중이었기 때문에 생성 된 오버 헤드로 인해 많은 메모리가 사용되었습니다. 아래의 설명을 참조하십시오.
이 _Exact_ 코드에 메모리 문제가 있습니까? 왜냐하면 나는 TaskManagers 메모리 그래프에서 약간의 충돌을 만들 수 없기 때문이다. –
예 - 정확한 코드입니다. TestEvent에 등록 된 다른 핸들러 나 TestClass의 인스턴스를 만드는 다른 핸들러는 없습니다. Dim TestClass를 1 백만 번하는 간단한 버튼. – stacked
흠 - 재생할 수 없습니다. 다시 테스트하십시오. –