System.Threading.Timer nicht kontinuierlich

8

Ich habe Probleme mit der Erstellung eines kontinuierlichen Timers. Es gibt multiple gestaffelte Threads, die auf Timern erzeugt werden, die für einige Zeit laufen und dann vollständig zum Stillstand kommen. Die maximalen Threads, die ich erlaube, sind 5 und das Timer-Intervall ist auf 10000 gesetzt. Also würde theoretisch 1 Thread alle 2 Sekunden ausgeführt werden.

Das passiert eine Weile, aber dann hört es auf. Derzeit teste ich in einer Konsolen-App und schreibe die Antworten auf die App.

Ich bin nicht genau sicher, was hier passiert

%Vor%

Jede Hilfe hier wird sehr geschätzt! Prost!

    
BoredOfBinary 05.05.2011, 18:15
quelle

2 Antworten

8

Der Grund dafür, dass Ihre Timer nach 3 Minuten absterben, ist, dass Sie viel Speicher zur Verfügung haben.

Das bedeutet, dass der Garbage Collector ungefähr 3 Minuten benötigt, um zu Ihren Objekten zu gelangen, bevor Sie sie sammeln.

Sie sollten einen Verweis auf den Timer für die Dauer seiner Lebensdauer behalten. Da Sie dies nicht tun, ist der Timer für die Garbage Collection geeignet, sobald Ihre Schleife endet.

3 Minuten später oder wenn GC dazu kommt, wird der Timer erfasst und der Code wird nicht mehr ausgeführt.

Behalte also einen Verweis auf das Timer-Objekt, und du solltest alles einstellen.

Hier ist ein einfaches LINQPad Skript zum Testen mit:

%Vor%

Beachten Sie, dass der Callback beendet wird, sobald der Haupt-Thread GC ausführt. Wenn Sie andererseits eine Kopie des Timers in ein Feld einfügen:

%Vor%

tickt der Timer weiter nach GC.

    
Lasse Vågsæther Karlsen 05.05.2011, 19:22
quelle
0

Vielleicht ist es einfach nicht in diesem Code Snippit, aber dekrementieren Sie counter ?

    
CodingWithSpike 05.05.2011 18:22
quelle

Tags und Links