2016-12-28 2 views
2

Ich entwickle seit einigen Jahren eine C# Multithread-Anwendung. Vor ein paar Tagen habe ich bemerkt, dass es während der Ausführung ständig neue Worker-Threads erstellt (fast einmal pro Sekunde). Beim Verwenden von Visual Studio 2013 "Threads" -Fenster haben diese Threads keinen Namen und die Position ist "nicht verfügbar", daher kann ich nicht überprüfen, wo diese Threads starten. Ich habe allen in meinem Code generierten Threads einen Namen gegeben, aber diese Threads werden immer noch mit "no name" erstellt, also nehme ich an, dass sie möglicherweise von einer externen Assembly generiert werden.Wie man weiß, welche Methode einen Worker Thread gestartet hat

Meine Anwendung integriert NLog.dll (für die Anmeldung in TXT-Dateien), System.Data.SQLite.dll (für Daten liest und schreibt in DB3-Datenbanken). Es verwendet auch UDP- und TCP-Soketen für den Datenaustausch.

Beispiel: Nach 2 Minuten laufender Anwendung habe ich 70 Threads. Dann, nach 20 Minuten ist die Anzahl der Fäden 190 !!! Wenn ich Threads Fenster in Visual Studio überprüfe, sehe ich, dass alle neuen Threads ahave "Kategorie" "Worker Thread" und "Name" ist "No Name".

Hier ein Schnappschuss meines Visual Studio Themen Fenster:

snapshot of my Visual Studio Threads window Kann mir jemand empfehlen, wie Fluten der Herkunft dieses Threads zu finden? Vielen Dank im Voraus!

+0

Wenn es In Ihrem Code können Sie Ihr Projekt nur entfernen, um die Ursache zu finden (wenn es sich um eine Bibliothek eines Drittanbieters handelt). Eine andere Möglichkeit wären einige Anti-Virus-Tools, die .dlls in erstellte Prozesse injizieren, um sie zu überprüfen und manchmal während der Entwicklung verrückt zu werden. – Oliver

Antwort

0

Ich würde Process Monitor von SysInternals Toolkit versuchen (www.sysinternals.com/). ProcMon verfügt über einen Filter für Thread-Aktivitätsereignisse.

0

Diese Art von Fäden (mit dem Namen „No Name“ und der Lage ist „nicht verfügbar“) von Timer Objekt erstellt werden (in meinem Fall System.Windows.Forms.Timer). Der Faden Überschwemmungen wurde durch diese Codezeile verursacht:

timerUpdateStatus.Change(0, 0); 

, die in der Tick Event-Handler und dann zurückgesetzt zurück auf den richtigen Wert durch einen anderen Aufruf Change Methode aufgerufen wurde:

timerUpdateStatus.Change(statusUpdateTime, 0); 
Verwandte Themen