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, 3647 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
VB for Applications
VB.net Combobox databinding langsam (4)

Frage von ForgottenRealm zum Thema VB for Applications ...

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

Frage von ahstax zum Thema Visual Studio ...

Basic
gelöst Mit vb.net PDF in Word-Dok einfügen (10)

Frage von ahstax zum Thema Basic ...

Visual Studio
gelöst VB.Net - Hilfe bei Regex (8)

Frage von emeriks zum Thema Visual Studio ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(2)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

LAN, WAN, Wireless
gelöst Statische Routen mit ISC-DHCP Server für Android Devices (22)

Frage von terminator zum Thema LAN, WAN, Wireless ...

Server
gelöst Wie erkennen, dass nur deutsche IPs Zugang zu einer Website haben? (22)

Frage von Coreknabe zum Thema Server ...

Exchange Server
gelöst Migration Exchange 2007 zu 2013 - Public Folder teilweise weg (16)

Frage von Andy1987 zum Thema Exchange Server ...