Рассмотрите этот код, который использует класс System.Threading.Timer.законное использование GC.Collect?
mTimer = new System.Threading.Timer(someTimer, null, dueTime.TotalMilliseconds, Timeout.Infinite);
Теперь у меня есть список с раз каждый день функция таймера необходимо выполнить, а затем он сбрасывает таймер в следующий раз, когда он должен выполнить.
private static void someTimer(object state)
{
TimeSpan dueTime = GetDueTime();
mTimer = new System.Threading.Timer(someTimer, null, (int)dueTime.TotalMilliseconds, System.Threading.Timeout.Infinite);
}
, но я заметил, что функция таймера выполняется несколько раз через некоторое время и, кажется, придется делать с сборщиком мусора. Старый объект все еще будет стрелять событиями до это сбор мусора.
Так что простой GC.Collect (0) исправил его, функция таймера выполняет только один раз. Я знаю, что общепринятое мнение заключается в том, что никогда не нужно использовать вручную вызов сборщика мусора, поэтому мой вопрос в том, является ли это законным использование GC.Collect? Как еще это можно исправить?
Почему вы повторно назначаете таймер вместо его изменения? –
weow. потому что я не знал об изменении функции ... в порядке, без хорошего использования GC.Collect здесь либо – Laurijssen
@RonBeyer Вы должны сделать ответ. – juharr