Beste Methode zum Verwalten des Thread-Pools gegen die Datenbankwarteschlange

8

Ich habe eine Datentabelle mit Übersichtseinträgen, und meine Software muss durchgehen und einen Webdienst erreichen, um Details zu erhalten, und diese Daten dann in die Datenbank zurückschreiben. Das synchrone Durchlaufen der Tabelle während des Aufrufs des Webdienstes und das Warten auf die Antwort ist zu langsam (es gibt Tausende von Einträgen), daher möchte ich die Ergebnisse (10 oder so auf einmal) herausnehmen und herausfädeln, so dass es 10 Ergebnisse liefert Operationen zur gleichen Zeit.

Meine Erfahrung mit C # -Threads ist begrenzt, um es gelinde auszudrücken. Was ist der beste Ansatz? Hat .NET ein threadsicheres Warteschlangensystem, mit dem ich sicherstellen kann, dass die Ergebnisse richtig und in Ordnung behandelt werden?

    
Mitchell V 17.11.2011, 00:09
quelle

2 Antworten

5

Abhängig von der Version von .NET Framework haben Sie zwei ziemlich gute Optionen.

Sie können ThreadPool.QueueUserWorkItem in jeder Version verwenden.

%Vor%

Wenn Sie .NET Framework 4.0 verwenden, können Sie die Task Parallel Library verwenden.

%Vor%

Es gibt viele andere vernünftige Wege, dies zu tun. Ich unterstreiche die obigen Muster, weil sie einfach sind und gut funktionieren. In Ermangelung spezifischer Details kann ich nicht mit Sicherheit sagen, dass beides perfekt zu Ihrer Situation passt, aber sie sollten ein guter Ausgangspunkt sein.

Aktualisierung:

Ich hatte eine kurze Zeit subparter zerebraler Aktivität. Wenn Sie die TPL zur Verfügung haben, können Sie auch Parallel.ForEach als einfachere Methode als alle oben genannten Task hocus-pocus verwenden.

%Vor%     
Brian Gideon 17.11.2011, 02:44
quelle
5
  

Gibt es in .NET ein threadsicheres Warteschlangensystem, mit dem ich sicherstellen kann, dass die Ergebnisse richtig und in Ordnung behandelt werden?

Dies wurde in .NET 4 hinzugefügt. Die BlockingCollection<T> -Klasse, standardmäßig fungiert als threadsichere Warteschlange für Producer / Consumer-Szenarien.

Es macht es ziemlich einfach, eine Anzahl von Elementen zu erstellen, die von der Sammlung und dem Prozess "konsumieren", wobei ein oder mehrere Elemente zur Sammlung hinzugefügt werden.

    
Reed Copsey 17.11.2011 00:18
quelle