Welche Art von Multi-Threading-Problemen müssen Sie in asp.net beachten?
Es ist riskant, Threads aus dem Code-Behind einer ASP.NET-Seite zu erzeugen, da der Worker-Prozess gelegentlich wiederverwendet wird und Ihr Thread abstürzt.
Wenn Sie lang andauernde Prozesse als Folge von Benutzeraktionen auf Webseiten starten müssen, sollten Sie eine Nachricht in MSMQ ablegen und einen separaten Hintergrunddienst verwenden, der die Warteschlange überwacht. Der Dienst könnte so lange dauern, wie er die Aufgabe erfüllen möchte, und die Webseite wäre fast sofort mit ihrer Arbeit fertig. Sie können dasselbe mit einem asynchronen Aufruf einer Webmethode erreichen, sind aber nicht darauf angewiesen, die Antwort zu erhalten, wenn die Webmethode fertig ist. Von Code-Behind muss es ein schnelles Feuer-und-Vergessen sein.
Eine Sache, auf die man bei Dingen achten sollte, die ablaufen (ich denke, dass httpContext dies tut), wenn du sie für Operationen verwendest, die "Feuer und Vergessen" sind, merke dir plötzlich, dass der ASP.net-Bereinigungscode vor dir läuft Wenn der Vorgang abgeschlossen ist, können Sie nicht auf bestimmte Informationen zugreifen.
Wenn dies für einen Webdienst gilt, sollten Sie das Thread-Pooling in Betracht ziehen. Zu viele Threads bringen Ihre Anwendung zum Erliegen, weil sie irgendwann um die CPU-Zeit konkurrieren werden.
Ist das für Datei- oder Netzwerk-IO? In diesem Fall sollten Sie auch asynchrone E / A in Erwägung ziehen. Es kann etwas mühsamer zu programmieren sein, aber Sie müssen sich nicht sorgen, dass zu viele Threads auf einmal erstellt werden.
Programmatic Caching ist ein Bereich, der mir sofort in den Sinn kommt. Es ist ein großartiges Feature, das sorgfältig verwendet werden muss. Da es über Anfragen verteilt wird, müssen Sie vor dem Aktualisieren Sperren einrichten.
Ein anderer Ort, den ich überprüfen würde, ist Code, der auf Dateisystem zugreift, wie zum Beispiel das Schreiben in Protokolldateien. Wenn eine Anforderung eine Lese- / Schreibsperre für eine Datei hat, werden andere gleichzeitige Anforderungen fehlgeschlagen, wenn sie nicht ordnungsgemäß verarbeitet werden.
Gibt es in der IIS-Konfiguration kein Limit von 25 Threads? Zumindest in IIS 6 glaube ich. Wenn Sie dieses Limit überschreiten, können interessante Dinge passieren (lesen Sie: looooooo lange Reaktionszeiten).
Je nachdem, was Sie benötigen, denken Sie bei Multi Threading daran, Anfragen vom Client hervorzubringen. Es ist sicher, Anfragen mit AJAX zu spawnen und dann die Ergebnisse in einem Callback zu bearbeiten. Oder benutze einen Service als Hintergrundmechanismus, der alle X Minuten läuft und im Hintergrund so abläuft.
Tags und Links multithreading asp.net