2011-07-07 10 views
5

Robię aplikację formularza wygranej C# (VS2010, .NET4), która używa timera, mój interwał to 1s, śledzę menedżera zadań i wydaje mi się, że moje użycie pamięci (wartość zapisana przed nazwą aplikacji w zakładce procesu menedżera zadań) zwiększa się o każdy interwał! Nie robię nic specjalnego w przypadku znacznika czasu, po prostu zwiększ zmienną całkowitą i wyświetl ją w etykiecie.Timer zwiększa wykorzystanie pamięci w C# app

Czy to normalne? Czy powinienem być zaniepokojony tym problemem z pamięcią? Mam zamiar uruchomić ten program na moim serwerze (poprzez zdalny pulpit), czy spowoduje to problemy na moim serwerze? Czy zabraknie mu pamięci? Używam timera z przybornika VS.

+2

Czy możesz umieścić kod o tym, jak wywołać timer i co robi timer w jego zdarzeniu "ElapsedEventHandler"? – Grambot

+0

Czy próbowałeś uruchomić 'Profiler' i sprawdzić czy to naprawdę problem? –

Odpowiedz

6

Weźmy następujący przykład, który aktualizuje etykietę każdy drugi z obecnym czasie:

var timer = new Timer 
{ 
    Interval = 1000, 
}; 
timer.Tick += (s, evt) => 
{ 
    label1.Text = DateTime.Now.ToLongTimeString(); 
}; 
timer.Start(); 

Jeśli masz kod jak to nie należy się martwić o zużycie pamięci. Śmieciarz może uruchomić w dowolnym momencie, aby zwolnić pamięć. Po prostu nie możesz określić, kiedy to się stanie.

+0

+1 od komentarza Darina. Dopóki nie robisz nic, aby utrzymać się na długo w pamięci, powinieneś być w porządku. GC je oczyści, jeśli będzie tego potrzebować. Przy każdym tiku utworzysz nową instancję napisową dla tekstu etykiety i nowe zdarzenia args w najmniej. Powinny one zostać poddane recyklingowi w razie potrzeby przez CLR i nie są warte uwagi. –

1

tylko do debugowania, spróbuj zmuszając zbieranie śmieci uruchamiając

GC.Collect(); 

swoje zużycie pamięci powinien iść z powrotem w dół do około gdzie to było. Przy okazji - możesz to zrobić w debugerze, oceniając to wyrażenie w trybie szybkiego oglądania.