c++/CLI Akcje w formie a wycieki pamięci

0

zauważyłem że prawie każda akcja w formie kończy się poświęceniem jakiegoś ułamka ramu który "wycieka" bezpowrotnie do końca działania programu (szczególnie przy przełączaniu "tabów"). Czy to normalne? Da się temu jakoś zaradzić?

1

Zależy czym są te akcje czy swoje zmienne alokujesz na stercie (i czy je zwalniasz) czy na stercie zarządzanej. W tym drugim wypadku można doprowadzić do wycieku np. zapominając odłączyć handler zdarzenia powodując to, że GC nie będzie mógł zwolnić obiektu. Jeżeli jesteś pewien, że sam nie powodujesz wycieku to nie ma co się przejmować. GC działa wtedy, gdy uzna to za stosowne. Ponadto, .NET Framework na stertę zarządzaną alokuje więcej miejsca niż potrzeba w celu przyśpieszenia alokacji w .NET. Z tego też powodu nawet małe aplikacje z pozoru zabierają więcej pamięci, która zostanie zwolniona, gdy system o to poprosi.

0

Alokacja pamięci w .Net Framework polega po prostu na inkrementacji pewnego wewnętrznego wskaźnika. Dzięki temu jest mega szybka, a konsekwencją jest, że nowy obiekt zajmuje pamięć bezpośrednio za utworzonym poprzednio — a nie na miejscu starych nieużywanych już obiektów. Taka sytuacja się powtarza aż zacznie brakować miejsca, wtedy odpala GC i dopiero teraz zwalniane są stare obiekty.

Coś za coś — nikt nie mówi, że .Net jest oszczędny pod względem pamięci…

1 użytkowników online, w tym zalogowanych: 0, gości: 1