TaskFactory.StartNew versus ThreadPool.QueueUserWorkItem
Offenbar die TaskFactory.StartNew
Methode .NET 4.0 ist gedacht als Ersatz für ThreadPool.QueueUserWorkItem
(nach diesem post, sowieso). Meine Frage ist einfach: weiß jemand, warum?
Tut TaskFactory.StartNew
haben Sie die bessere Leistung? Funktioniert es mit weniger Speicher? Oder ist es vor allem für die zusätzliche Funktionalität, die durch Task
Klasse? Im letzteren Fall hat StartNew
möglicherweise haben schlimmer Leistung als QueueUserWorkItem
?
Scheint es mir, dass StartNew
würde tatsächlich potenziell verwenden mehr Speicher als QueueUserWorkItem
, da gibt es eine Task
- Objekt bei jedem Aufruf, und ich würde erwarten, dass dazu führen, dass mehr Speicher allocation.
In jedem Fall, ich bin daran interessiert zu wissen, welche ist mehr geeignet für eine high-performance-Szenario.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leistung ist ein ... kommt. Wenn Sie tun, eine Menge von parallelen Aufgaben, dann .net 4 Aufgaben besser ausgeführt wird, plus geben Sie mehr feinkörnige Kontrolle (robuster Stornierung, die Fähigkeit zu warten, sich auf mehrere Aufgaben gleichzeitig, Möglichkeit zum erstellen, parent/child-task-Beziehungen, die Fähigkeit zu geben LongRunning, etc.. etc.. etc..)
Darüber hinaus die Möglichkeit zu geben Ihre eigenen Aufgabenplaner bedeutet, dass Sie können passen Sie es für Ihre Bedürfnisse. Der integrierte task Planer ist weit mehr multi-core-bewusst, als der alte ThreadPool.
Als für die mit mehr Speicher. Jeder thread behält sich vor, mindestens 1MB Speicher, die winzige Menge verwendet zum speichern von task-Objekt ist belanglos. Ich würde wirklich denken, dass die Letzte von Ihren sorgen.
TaskFactory.StartNew ist besser geeignet für eine hohe Leistung Szenario.
Gewinnen Sie Produktivität profitieren von der Reihe von Klassen im System.Threading.Aufgaben und die Pflege, die ging in Ihre Gestaltung + integration mit der parallelen Schleifen und Optionen.
Zudem erhalten Sie einen performance-Vorteil, da System.Threading.Aufgaben basieren auf der Arbeit stehlen in der thread-pool-was ist besser für die Lokalität (wenn es darauf ankommt).
Rick
Nur von den blicken der Dinge, die Task-Klassen wurden entworfen, um die Arbeit mit dem neuen parallel-Funktionen .Net 4. Es sieht auch wie Sie verwenden können
Action
oderAction<T>
direkt beim starten/erstellen einer Aufgabe. Das ist alles 100% - Vermutung, aber basierend auf stochern die docs :).