2010-07-26 16 views
9

Od lat używam delphi i od zawsze zastanawiałem się, dlaczego minimalizacja i przywracanie aplikacji powodują, że zużywa ona mniej pamięci?Delphi - Minimize & Restore zwalnia pamięć?

Jako przykład używam delphi 7 i tworzę nowy projekt bez niczego na nim, ale pusty formularz, na którym rozpoczynają się wszystkie projekty, a następnie wciskam klawisz F9, aby uruchomić aplikację, a następnie spójrz na użycie pamięci dla aplikacji i zajmuje około 3,5mb, a następnie minimalizuję aplikację i zużycie pamięci spada do około 760kb, a następnie w końcu przywracam aplikację, a wykorzystanie pamięci powraca do około 1,5mb, co stanowi około 1/2 tego, co było, kiedy najpierw załadował i to zawsze myliło mnie co do tego, co się stało, a jeszcze bardziej do rzeczy jest i tak, aby uruchomić aplikację z pewną dyrektywą, która sprawia, że ​​używa 1.5mb pamięci zamiast 3,5mb, które normalnie używa.

Cheers, Dave

+0

"Pamięć" ma bardzo ogólnikową definicję. To, co widzisz, to malejący zestaw roboczy. Ten artykuł może się również przydać: http://blog.euraalog.com/catching-memory-leaks/ – Alex

+0

Po pracy dla Microsoftu jest wystarczająco mało. –

Odpowiedz

5

chyba jest coś z zarządzaniem pamięcią okna. spróbuj to samo z kalkulatora Windows i zachowanie jest takie samo :))

tutaj odpowiedź: http://support.microsoft.com/?kbid=293215 i niektórzy ludzie mają takie samo pytanie: http://digital.ni.com/public.nsf/allkb/9EA3D4258E037B8A8625763300434D4D

poważaniem,

+0

Dzięki za odpowiedź byłem bardziej ciekawy niż cokolwiek innego teraz wiem, że to nie tylko moje aplikacje nie są jedynymi, którzy to robią. Jeszcze raz dziękuję, Dave – dave

+0

+1 za KB artykuł – Alex

+0

Jest to dobry przykład systemu Windows, który zwykle mówię, kiedy wymyślam, co zrobili: "[wstaw tu głośne wyrażenie niedokładne] Nie mogę uwierzyć, że to zrobili ! " Okłamania systemu Windows, ponieważ nie mogli dowiedzieć się, które z rzeczy, które mogliby powiedzieć, są najbliższe temu, co chcielibyście wiedzieć, na przykład ile pamięci używa ta aplikacja. Wybrali więc jedną z rzeczy, które wiedzą, jak obliczyć, i opisali ją przyjazną dla użytkownika, ale niedokładną krótką etykietą; "to jest ten, którego szukasz", kiedy wyraźnie nie jest. –

4

Here you can find bardzo jasne wyjaśnienie od Iana Martinsa. Gdy aplikacja minimalizuje wywołanie systemowe, procedura SetProcessWorkingSetSize dla wolnej nieaktywnej pamięci procesu.

Możesz zrobić to samo, dodając ten kod do swojej aplikacji. W przycisku OnClick możesz to zrobić:

procedure LiberarMemoria; 
begin 
    if Win32Platform = VER_PLATFORM_WIN32_NT then 
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); 
end; 

Efekt jest podobny do zminimalizowania zastosowania. Jeśli twoja aplikacja wykonuje jakieś zadanie, aby w końcu użyć dużego bloku pamięci, możesz wymusić jej zwolnienie po użyciu, używając tego małego kodu.

Pozdrowienia

+0

Pomogłoby mi, gdyby bardzo jasne wyjaśnienie od Iana Marteensa było w języku angielskim ... –

+2

Cytat z podanego linku: "Najprostsza rzecz by działała na przykład z timera, co minutę". Tak, jasne. Trzymaj się z dala od tego artykułu dla własnego dobra. – Alex

+1

@Alexander, proszę, sprawdź i przeczytaj uważnie mój komentarz i zobacz, gdziekolwiek zalecałem, aby zwolnienie pamięci było dokonywane co minutę. Powiedziałem: "... Jeśli twoja aplikacja wykonuje jakieś zadanie, ZWYKLIWIE korzystasz z dużego bloku pamięci, możesz wymusić jej uwolnienie PO UŻYCIU" (1) Ostatecznie (2) PO UŻYCIU GO, nie Co minutę . Poleciłem to, dla wyjaśnienia i dla kodu. Proszę, przeczytaj uważnie odpowiedzi. P.D: Przepraszam za błędy z angielskiego. –

Powiązane problemy