Moin Onz,
also als erstes würde ich mal den Timer zu Beginn des OnTimer ab- und am Ende wieder einschalten, denn wenn die Abarbeitung länger läuft, als das Interval eingestellt ist, werden die Objekte immer wieder neu erstellt, bevor sie freigegeben werden.
Dann solltest Du Dir angewöhnen nach dem Erzeugen eines Objektes einen try/finally Block zu benutzen, wobei im finally Abschnitt das Objekt wieder freigegeben wird. Am Besten mit FreeAndNil, damit anschliessend erkannt werden kann (z.B. if Objektvariable = nil then), dass diese kein Objekt mehr enthält.
Dein Objekt UpdateCheck wird z.b. an der falschen Stelle wieder freigegeben. Das Freigeben gehört unmittelbar hinter das AlUpdatecheck:=true; und nicht hinter das dahinterliegende end;
BTW: So lang ist der Code ja nun auch wieder nicht. Da hatten wir schon längere