VB.Net 2005 Threadpool
Hallo zusammen,
ich habe ein kleines Programm geschrieben welches die Größe alle Shares unseres Fileservers ausliest und in eine SQL Datenbank schreibt. Da es über 1000 Shares sind gehe ich wie folgt vor: In einer For-Next schleife lese ich alle Shares in ein Array ein.
Anschließend übergebe ich alle Shares in einer 2. For-Next schleife an einen Threadpool.
Der Threadpool startet eine Sub welches dann die Größe des Shares erfasst und es in die SQL Datenbank einträgt.
Mein Problem ist jetzt das ich immer mehr Threads bekomme und das Programm den Arbeitsspeicher frisst. Meiner Meinung nach läst ein Threadpool doch nur 25 Threads zu. Also dürfte nur 25 dieser Subs laufen und wenn eins fertig ist startet er das nächste aus der Warteschlange oder lieg ich da falsch?
Zur verdeutlichung etwas Code:
Übergabe an den Threadpool:
Das Sub mit Auslesen der Pfad Variable:
Und das Ende der Sub mit Aufruf der SQL-Schreibe-funktion und der Aktualisierung von 2 Steuerelementen:
Kann mir jemand sagen wie ich die Threads beenden muß damit nicht ewig viel Ram gefressen wird?
Vielen Dank
MfG
Phil
ich habe ein kleines Programm geschrieben welches die Größe alle Shares unseres Fileservers ausliest und in eine SQL Datenbank schreibt. Da es über 1000 Shares sind gehe ich wie folgt vor: In einer For-Next schleife lese ich alle Shares in ein Array ein.
Anschließend übergebe ich alle Shares in einer 2. For-Next schleife an einen Threadpool.
Der Threadpool startet eine Sub welches dann die Größe des Shares erfasst und es in die SQL Datenbank einträgt.
Mein Problem ist jetzt das ich immer mehr Threads bekomme und das Programm den Arbeitsspeicher frisst. Meiner Meinung nach läst ein Threadpool doch nur 25 Threads zu. Also dürfte nur 25 dieser Subs laufen und wenn eins fertig ist startet er das nächste aus der Warteschlange oder lieg ich da falsch?
Zur verdeutlichung etwas Code:
Übergabe an den Threadpool:
Dim ti As Object = "\\Fileserver\" & oshare.Name
ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf GetFolderSize), ti)
Das Sub mit Auslesen der Pfad Variable:
Sub GetFolderSize(ByVal state As Object)
Try
Dim Dirpath = CType(state, String)
Und das Ende der Sub mit Aufruf der SQL-Schreibe-funktion und der Aktualisierung von 2 Steuerelementen:
SyncLock Me
Me.dbentry(Dirpath, size2)
End SyncLock
Catch ex As Exception
Dim DirPath As String = CStr(state(1))
MsgBox("Error in " & DirPath & ": " & ex.Message)
End Try
Me.Invoke(New progressDelegate(AddressOf progress))
Me.Invoke(New txtdelegate(AddressOf timevorraus))
End Sub
Kann mir jemand sagen wie ich die Threads beenden muß damit nicht ewig viel Ram gefressen wird?
Vielen Dank
MfG
Phil
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 106437
Url: https://administrator.de/contentid/106437
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
1 Kommentar