Ich verwende derzeit den System.Threading.Timer in einem 10-Sekunden-Intervall. Ich habe jedes Mal, wenn der Timer ausgelöst wird, ein kleines Stück Code hinzugefügt, um in eine Datei zu schreiben, und während die meiste Zeit pünktlich feuert, manchmal (vermutlich, wenn der Rest der App gekauft wird), kann 30 nicht ausgelöst werden oder 40 Sekunden und feuert immer wieder in schneller Folge.Timer zuverlässiger als System.Threading.Timer
Gibt es einen zuverlässigeren Timer, den ich in .NET 3.5 verwenden kann?
Der Timer ist wie folgt aufgebaut
Timer someTimer = new Timer(new TimerCallback(SomeMethod), null, 0, 10000);
... und der Rückruf ist:
private static void SomeMethod(object state)
Allerdings ist es schwierig, viel mehr Code als dies zur Verfügung zu stellen, wie es normalerweise der Timer feuert richtig . Wenn es in eine massive Anwendung eingebettet ist (etwa 100.000 Zeilen), wobei mehrere Threads abgefeuert werden, links, rechts und in der Mitte, beginnen Sie langsam zu sehen, wie der Timer intermittierend ausgelöst wird. Ich habe mehrere Beiträge gesehen, die darauf hindeuten, dass der ThreadPool möglicherweise erschöpft ist. Daher schaue ich gerade nach, ob dies der Fall sein könnte.
Können Sie einen Beispielcode angeben, anstatt * anzunehmen * der Timer ist unzuverlässig? Ich tendiere dazu, meinen eigenen Code zu finden, der das Problem und nicht die .NET Frameworks ist. –
Der Timer ist wie folgt eingerichtet: – JamesPD
ThreadPool-Verhungern wird sehr wahrscheinlich der Fall sein, wenn die Verarbeitung des Ticks länger als 10 Sekunden dauert. Sie werden langsam einen Rückstand von Gegenständen bekommen. Die Standardtaktik besteht darin, den Timer beim Eintritt in ein Tick-Ereignis zu stoppen und am Ende erneut zu starten, um aufgrund langer Verarbeitungszeiten kein "Timer-Leck" zu haben. –