2013-10-24 10 views
5

Pracuję nad jakimś "darmowym RAM" narzędziem, które musi wymuszać wysyłanie przez system Windows 'LOW_MEMORY' sygnału do wszystkich aplikacji (który prosi całą aplikację o zwolnienie ich nieużywanych danych, serwer SQL i pamięć podręczną plików zostaną wyczyszczone, dzięki czemu otrzymasz dużo dodatkowej wolnej przestrzeni).Jak zmusić system Windows do wysyłania sygnału "LOW_MEMORY" do wszystkich aplikacji?

Co będzie najlepszym podejściem do zrobienia tego w C++? Najbardziej "naturalnym" rozwiązaniem dla mnie byłoby przydzielenie dużej ilości pamięci, ale czy jest to "dobry" i "stabilny" sposób? Może jest tam jakaś natywna funkcja systemu Windows C++ w WinAPI lub gdzieś indziej?

p.s. Koncepcja tego narzędzia pochodzą z (i wiem, że lepiej jest kupić trochę ... RAM, ale muszę napisać takie narzędzie teraz):

https://superuser.com/questions/214526/how-does-a-free-up-ram-utility-free-up-ram

+0

Dlaczego używasz/piszesz takie narzędzie? W razie potrzeby system operacyjny automatycznie zwalnia pamięć RAM. – orlp

+8

... i przeczytanie połączonego pytania powinno dać ci pojęcie, że takie narzędzie w ogóle tak naprawdę nikomu nie pomoże – codeling

+0

Piszę to, ponieważ firma, w której pracuję, zmusiła mnie do napisania tego. Tak więc nie ma "żadnej dyskusji";) I wiem, że większość takich programów (np. CClenaer itp.) Robi to w ten sposób. Tak więc chcę wysłać ten sygnał do aplikacji Windows w C++, nawet jeśli jest to w pewnym sensie bezsensowne. – PolGraphic

Odpowiedz

2

Inna możliwość iteracyjne thru listy aktywnych procesów i poprosić każdy przycinać to zestaw roboczy poprzez SetProcessWorkingSetSize (hProcess (size_t) -1 (size_t -1)), zgodnie z opisem here on MSDN potencjalnie omijając aplikacje, jeśli Twoim zamiarem jest próba poprawy wydajności niektórych konkretnych aplikacji (testy porównawcze są tutaj absolutnie Twoim przyjacielem).

Powoduje to, że system operacyjny opróżnia strony wirtualne na dysk, zwalniając pamięć fizyczną dla innych aplikacji. Nie jestem pewien, czy to spowoduje, np. SQL Server, aby rozluźnić wymagania pamięci, ale z pewnością warto spróbować.

0

Istnieje kilka linków, które mogą być przydatne dla Ciebie na MSDN:

Mam nadzieję, że to może dać ci początek. Innym sposobem, w jaki można zwolnić ram, jest zasygnalizowanie systemu Windows w celu przyporządkowania każdej pamięci RAM procesów do pliku wymiany, co zwolni fizyczną pamięć RAM. Następnie, gdy użytkownik korzysta z konkretnej aplikacji, zostanie przeniesiony z powrotem do systemu pamięci RAM przez system operacyjny, w ten sposób zarządzanie jest w dalszym ciągu obsługiwane przez system operacyjny.

+0

Głosowano dla "góry", aby ją zneutralizować;) Smutne, że nie mogłem oznaczyć obu twoich odpowiedzi, ale muszę wybrać, a James Hugard dał rozwiązanie, a mimo to dałeś świetny punkt do rozpoczęcia głębszych badań. – PolGraphic

+0

Dzięki za głosowanie w górę :) był szczerze po prostu ciekawy, uwielbiam odpowiedź Jamesa, miły, zwięzły i przyjazny dla OS sposób spłukiwania wirtualnego barana. – GMasucci

Powiązane problemy