Hi,
ich bin neu hier und weiß nicht so recht wie ich anfangen soll.
Ich habe ein grundsätzliches Problem mit einer Bibliothek, diese habe ich von Extern bekommen. Leider gibt es in dieser Bibliothek einen Memory Leak. Der sich nach 8Tagen/24h der Benutzung bemerkbar macht.
Diese Bibliothek ermöglicht das Empfangen von Bildern, von einer speziellen Kamera. Ich muss das Programm also öfters neu starten.
Jetzt habe ich mir gedacht ich lass die Aufgaben in einer 2ten Form laufen, um sie dann zyklisch zu schließen damit ich sie wieder starten kann.
Ich bin davon ausgegangen das beim Schließen der 2ten Form der Speicher wieder freigegeben wird. Dies ist leider nicht so.
Ich habe mir ein Bibliothek/Klasse erstellt die mir einen Speicher Leak erzeugt.
Dann habe ich ein Projekt erstellt mit 2 Formen. Die "Start" Form enthält 2 Button. Die "Bilder" Form enthält den Verweis zur Bibliothek/Klasse.
Durch den "Start" Button wird die Form "Bilder" geöffnet und der Speicher wird gefüllt. Mit dem "Stop" Button wird die erstellte Form wieder geschlossen.
Durch das Schließen der Form wird wie gesagt leider nicht der Speicher freigegeben.
Nun meine Fragen, ist es überhaupt über diesen Weg möglich? bzw. habt ihr eine Idee wie ich dieses Problem lösen könnte?
Kann man die "Bilder" Form so aufrufen, das sie wie ein eigenes Programm behandelt wird?
Ich danke schon mal im Voraus für eure Bemühungen.
Bibliothek/Klasse die mir den Speicher Leak erzeugt:
Start Form:
Bilder Form:
Freundliche Grüße
sITrAiN
ich bin neu hier und weiß nicht so recht wie ich anfangen soll.
Ich habe ein grundsätzliches Problem mit einer Bibliothek, diese habe ich von Extern bekommen. Leider gibt es in dieser Bibliothek einen Memory Leak. Der sich nach 8Tagen/24h der Benutzung bemerkbar macht.
Diese Bibliothek ermöglicht das Empfangen von Bildern, von einer speziellen Kamera. Ich muss das Programm also öfters neu starten.
Jetzt habe ich mir gedacht ich lass die Aufgaben in einer 2ten Form laufen, um sie dann zyklisch zu schließen damit ich sie wieder starten kann.
Ich bin davon ausgegangen das beim Schließen der 2ten Form der Speicher wieder freigegeben wird. Dies ist leider nicht so.
Ich habe mir ein Bibliothek/Klasse erstellt die mir einen Speicher Leak erzeugt.
Dann habe ich ein Projekt erstellt mit 2 Formen. Die "Start" Form enthält 2 Button. Die "Bilder" Form enthält den Verweis zur Bibliothek/Klasse.
Durch den "Start" Button wird die Form "Bilder" geöffnet und der Speicher wird gefüllt. Mit dem "Stop" Button wird die erstellte Form wieder geschlossen.
Durch das Schließen der Form wird wie gesagt leider nicht der Speicher freigegeben.
Nun meine Fragen, ist es überhaupt über diesen Weg möglich? bzw. habt ihr eine Idee wie ich dieses Problem lösen könnte?
Kann man die "Bilder" Form so aufrufen, das sie wie ein eigenes Programm behandelt wird?
Ich danke schon mal im Voraus für eure Bemühungen.
Bibliothek/Klasse die mir den Speicher Leak erzeugt:
VB.NET-Quellcode
- Imports System.Drawing
- Imports System.Windows.Forms
- Public Class Bilder_Klasse
- Public listebild As New List(Of Bitmap)
- Public Text1 As String = ""
- Public Text2 As String = ""
- Public Text3 As String = ""
- Public Text4 As String = ""
- Public Text5 As String = ""
- Public Text6 As String = ""
- Public Text7 As String = ""
- Public Text8 As String = ""
- Public Pfad_Image As String = ""
- WithEvents Timer_Start As New Timer
- Public Sub Start_Klasse()
- Timer_Start.Start()
- End Sub
- Public Sub Stop_Klasse()
- Timer_Start.Stop()
- End Sub
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer_Start.Tick
- Text1 = Process.GetCurrentProcess().StartTime
- Text2 = Process.GetCurrentProcess().Id
- Text3 = listebild.Count
- Text4 = (Process.GetCurrentProcess().PagedMemorySize64 / (1024 ^ 2)).ToString
- Text5 = (Process.GetCurrentProcess().PagedSystemMemorySize64 / (1024 ^ 2)).ToString
- Text6 = My.Computer.Info.TotalVirtualMemory / (1024 ^ 3)
- Text7 = (Process.GetCurrentProcess().PrivateMemorySize64 / (1024 ^ 2)).ToString
- Text8 = (Process.GetCurrentProcess().WorkingSet64 / (1024 ^ 2)).ToString
- Dim test As Bitmap = New Bitmap(Pfad_Image)
- listebild.Add(test)
- End Sub
- End Class
Start Form:
VB.NET-Quellcode
- Public Class Start
- Shared t As New Threading.Thread(AddressOf Start_Form)
- Private Shared Sub Start_Form()
- Application.Run(New Bilder)
- End Sub
- Shared Sub ShowForm_Async()
- t.Start()
- End Sub
- Shared Sub CloseForm_Async()
- t.Abort()
- End Sub
- Private Sub bt_start_Click(sender As Object, e As EventArgs) Handles bt_start.Click
- bt_start.Enabled = False
- t = New Threading.Thread(AddressOf Start_Form)
- ShowForm_Async()
- bt_stop.Enabled = True
- End Sub
- Private Sub bt_stop_Click(sender As Object, e As EventArgs) Handles bt_stop.Click
- bt_stop.Enabled = False
- CloseForm_Async()
- bt_start.Enabled = True
- End Sub
- End Class
Bilder Form:
VB.NET-Quellcode
- Public Class Bilder
- Dim Test_Klasse As ClassLibrary1.Bilder_Klasse
- Private Sub t_refresh_Tick(sender As Object, e As EventArgs) Handles t_refresh.Tick
- lbl1.Text = Test_Klasse.Text1
- lbl2.Text = Test_Klasse.Text2
- lbl3.Text = Test_Klasse.Text3
- lbl4.Text = Test_Klasse.Text4
- lbl5.Text = Test_Klasse.Text5
- lbl6.Text = Test_Klasse.Text6
- lbl7.Text = Test_Klasse.Text7
- lbl8.Text = Test_Klasse.Text8
- End Sub
- Private Sub Bilder_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Test_Klasse = New ClassLibrary1.Bilder_Klasse
- Test_Klasse.Pfad_Image = "C:\Users\Bernd\Pictures\maik.bmp"
- Test_Klasse.Start_Klasse()
- t_refresh.Start()
- End Sub
- Private Sub Bilder_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
- Test_Klasse.Stop_Klasse()
- t_refresh.Stop()
- End Sub
- End Class
Freundliche Grüße
sITrAiN