Mam formularz z etykietą, który jest aktualizowany przezKontrola System.Windows.Forms.Timer co 2 sekundy. W menedżerze zadań widzę, że zużycie pamięci rośnie, nawet jeśli program nic nie robi (ale etykieta nadal jest aktualizowana o najnowsze informacje, czyli na przykład zużycie pamięci) Przykładowy kod tekstu etykiety:
tlblRam.Text = string.Format("Ram: {0} MB", ConvertBytesToMegabytes(System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64).ToString("0.00"));
Ale jeśli zmuszę GC do zbierania pokoleń-przywraca całą pamięć do jakiegoś niższego stanu. Jest to również wykonywane automatycznie po ~ 5 minutach pracy nieaktywnego programu. Czy to oznacza, że GC czeka na swój cykl drugiej generacji i dopiero wtedy zbiera wszystkie ciągi znaków, które były wartościami tlblRam.Text?
Odpowiedzi:
1 dla odpowiedzi № 1Czy to oznacza, że GC czeka na swój cykl drugiej generacji i dopiero wtedy zbiera wszystkie ciągi znaków, które były wartościami tlblRam.Text?
Zasadniczo tak. Prawdopodobnie będzie więcej rzeczy żądających i zwalniających pamięć w uruchomionej aplikacji Windows.
Co ważniejsze: nie martw się, nie ma tutaj problemu. Nie próbuj „pomagać”, uruchamiając y = GC ręcznie, tylko pogorszysz sytuację.