Ich möchte Arbeiter in eine Warteschlange hinzufügen, aber nur die ersten N Arbeiter parallel verarbeiten. Alle Samples, die ich finde, sind in C#.Ich brauche Hilfe beim Erstellen eines TaskScheduler, um Threading Überlastung zu vermeiden
Dieses ist für einen Programmierer wahrscheinlich einfach, aber ich bin ein nicht. Ich weiß genug über VB, um einfache Programme zu schreiben.
Aber meine erste Anwendung läuft gut, bis es plötzlich 100% CPU trifft und dann abstürzt. Hilfe, bitte (Ja, ich habe 5 Stunden Arbeitssuche vergeudet, bevor ich das poste ...)
Mehr Kontext: Durchführen einer rekursiven Inventarisierung von Verzeichnisstrukturen, Dateien und Berechtigungen über Dateiserver mit über 1 Million Verzeichnissen/Unterverzeichnisse.
Der Prozess wird seriell ausgeführt, dauert jedoch Monate. Management atmet schon an meinem Hals. Wenn ich versuche, Tasks zu verwenden, geht es zu etwa 1000 Threads, dann trifft 100% CPU, reagiert nicht mehr und stürzt dann ab. Dies ist auf einem 16-Core-Server mit 112 GB RAM.
--Added Also, mit der Probe zur Verwendung von Semaphoren zur Verfügung gestellt, das ist, was ich setze in:
Public Class InvDir
Private mSm as Semaphore
Public Sub New(ByVal maxPrc As Integer)
mSm = New Semaphore(maxPrc, maxPrc)
End Sub
Public Sub GetInventory(ByVal Path As String, ByRef Totals As Object, ByRef MyData As Object)
mSm.WaitOne()
Task.Factory.StartNew(Sub()
Dim CurDir As New IO.DirectoryInfo(Path)
Totals.SubDirectoryCount += CurDir.GetDirectories().Count
Totals.FilesCount += CurDir.GetFiles().Count
For Each CurFile As IO.FileInfo in CurDir.EnumerateFiles()
MyData.AddFile(CurFile.FileName, CurFile.Extension, CurFile.FullName, CurFile.Length)
Next
End Sub).ContinueWith(Function(x) mSm.Release())
End Sub
End Class
Sagen Sie "Management", um einen Berater einzustellen. – Plutonix
Ihre Frage ist viel zu weit gefasst und wir können nicht erklären, warum Code, den wir nicht sehen können, sich nicht richtig verhält. Wir werden keinen Aufgabenplaner für Sie schreiben, und wir sind keine Tutorial-Site, auf der wir Ihnen das beibringen können. Wenn Sie * genug über VB wissen, um einfache Programme * zu schreiben, müssen Sie über Ihre derzeitigen Fähigkeiten hinausgehen und Sie müssen dem Management mitteilen, dass Sie Hilfe benötigen, damit sie einen Auftragnehmer oder Programmierer einstellen können. –
Ich bitte niemanden, einen "Task Scheduler" zu schreiben. Es gibt ein TaskScheduler OBJECT in .NET und der gesamte Beispielcode, den ich finde, wie man ihn benutzt, ist in C#. Ich habe nur gefragt, wie man es in VB.NET macht. Ich gebe ein, was ich mache, um einen Kontext zu geben, nicht um jemanden, der meine Arbeit für mich erledigt. Ich habe versucht, eine Sammlung von Task-Objekten und die Parallel.ForEach-Methoden zu verwenden, aber sie nehmen bald alle Threads auf. – HelpThisisNOTmyJob