Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VB.Net 2005 Threadpool

Frage Entwicklung Visual Studio

Mitglied: kruemel666

kruemel666 (Level 1) - Jetzt verbinden

19.01.2009, aktualisiert 11:44 Uhr, 3654 Aufrufe, 1 Kommentar

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:
01.
Dim ti As Object = "\\Fileserver\" & oshare.Name 
02.
                    ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf GetFolderSize), ti)
Das Sub mit Auslesen der Pfad Variable:
01.
Sub GetFolderSize(ByVal state As Object) 
02.
        Try 
03.
            Dim Dirpath = CType(state, String)
Und das Ende der Sub mit Aufruf der SQL-Schreibe-funktion und der Aktualisierung von 2 Steuerelementen:
01.
            SyncLock Me 
02.
                Me.dbentry(Dirpath, size2) 
03.
            End SyncLock 
04.
        Catch ex As Exception 
05.
            Dim DirPath As String = CStr(state(1)) 
06.
            MsgBox("Error in " & DirPath & ": " & ex.Message) 
07.
        End Try 
08.
 
09.
        Me.Invoke(New progressDelegate(AddressOf progress)) 
10.
        Me.Invoke(New txtdelegate(AddressOf timevorraus)) 
11.
End Sub
Kann mir jemand sagen wie ich die Threads beenden muß damit nicht ewig viel Ram gefressen wird?

Vielen Dank

MfG
Phil
Mitglied: kruemel666
20.01.2009 um 07:07 Uhr
Hallo zusammen,

ich habe es inzwischen geschafft das die Threads beendet werden und auch wirklich aus dem Task-Manager rausfliegen. Ich habe jetzt allerdings das Problem das der verbrauchte Arbeitsspeicher nicht sinkt.

Auch nicht wenn ich GC.Collect aufrufe. Die einzige Möglichkeit den verbrauchten Arbeitsspeicher zu senken ist mit diesem Code:
01.
Private Declare Auto Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal procHandle As IntPtr, ByVal min As Int32, ByVal max As Int32) As Boolean 
02.
 
03.
    Public Sub SetProcessWorkingSetSize() 
04.
        Try 
05.
            Dim Mem As Process 
06.
            Mem = Process.GetCurrentProcess() 
07.
            SetProcessWorkingSetSize(Mem.Handle, -1, -1) 
08.
        Catch ex As Exception 
09.
            MsgBox(ex.ToString) 
10.
        End Try 
11.
    End Sub
Das ganze bewirkt aber nur das der ganze Müll ins Pagefile geschrieben wird. Ich hab auch meinen kompletten Quelltext schon überprüft und jede Variable mit = Nothing am Schluß geschlossen. Objekte habe ich mit .Dispose() geschlossen.

Gibt es eine Möglichkeit den Speicher den ein Thread belegt wieder frei zu geben sodass wirklich nur das im Speicher ist was auch wirklich grade läuft. Und nicht das das Programm je länger es läuft desto mehr Speicher belegt.

MfG
Phil
Bitte warten ..
Ähnliche Inhalte
Basic
gelöst Mit vb.net PDF in Word-Dok einfügen (10)

Frage von ahstax zum Thema Basic ...

Visual Studio
Srv records aus dem dns abfragen unter vb.net (13)

Frage von Herbrich19 zum Thema Visual Studio ...

Visual Studio
gelöst VB.Net - Problem mit Umleitung der Standard-Ausgabe (4)

Frage von emeriks zum Thema Visual Studio ...

Visual Studio
gelöst Vb.net: Word-Doc seitenweise durchsuchen nach Textmarke (7)

Frage von ahstax zum Thema Visual Studio ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (59)

Frage von pjrtvly zum Thema Internet ...

DSL, VDSL
VDSL Signal via PowerLine an Fritzbox - Möglich? (19)

Frage von Seichobob zum Thema DSL, VDSL ...

Windows Server
Benutzer sperrt sich immer wieder im Active Directory Contoller (18)

Frage von Kirdy1301 zum Thema Windows Server ...