Ich brauche ein paar Timer als lokale Variable schaffen so etwas wie zu tun:Wie kann ich verhindern, dass mein Timer vom GC erfasst wird, bevor der Rückruf ausgeführt wird?
void Foo()
{
Timer t = new Timer(myTimerCallback,null,1000,Timeout.Infinite);
}
Leider sind einige von ihnen werden von GC gesammelt, bevor sie myTimerCallback nach 1 Sekunde aufzurufen. Da ich so viele Timer habe, ist es unmöglich, sie in einem privaten statischen Member zu speichern. Und es ist auch schwer einen Platz zu finden, an den man GC.Keeplive (t) stellen kann.
Wie kann ich jeden Timer machen, bevor er stirbt?
Der Grund, warum ich diesen Timer nicht in einem privaten Mitglied speichern möchte, ist, dass es zu viele gibt. Ich kann es versuchen, aber gibt es einen besseren Weg? –
Wenn es zu viele Timer zum Speichern gibt, ist es vielleicht Zeit, einen Schritt zurück zu machen und sich zu fragen, ob Sie das richtige Problem lösen? –
seconding @ Damiens Kommentar. Sie sollten den GC in einer verwalteten Laufzeit nicht bekämpfen. Ich würde vorschlagen, die Kugel zu beißen und die Referenzen zu speichern. Sie werden überrascht sein, wie wenig Auswirkungen es auf die Leistung hat. –