2013-10-24 3 views
5

Ich bin auf einige „freie RAM“ Werkzeug arbeiten, das Fenster zwingen muss 'LOW_MEMORY' Signal an alle Anwendungen zu senden (die alle Anwendung fragt ihre ungenutzte Daten, SQL-Server und Cache-Dateien so erhalten befreien gelöscht werden Sie am Ende mit viel mehr freien Platz).Wie erzwinge Windows, um 'LOW_MEMORY' Signal an alle Anwendungen zu senden?

Was wird am besten Ansatz es in C++ zu tun? Die "natürlichste" Lösung für mich wäre es, eine große Menge an Speicher zuzuordnen, aber ist es ein "guter" und "stabiler" Weg? Vielleicht gibt es irgendeine C++ Windows native Funktion dafür in WinAPI oder woanders?

p.s. Das Konzept dieses Werkzeugs kam (und ich weiß, dass eine bessere Möglichkeit, etwas RAM kaufen ... ist, aber ich muss solches Werkzeug schreiben jetzt):

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

+0

Warum verwenden/schreiben Sie ein solches Tool? Ihr Betriebssystem gibt bei Bedarf automatisch RAM frei. – orlp

+8

... und das Lesen der verknüpften Frage sollte Ihnen schon die Idee gegeben haben, dass ein solches Werkzeug im Allgemeinen Ihnen nichts Gutes tut – codeling

+0

Ich schreibe es, weil Firma, für die ich arbeite, mich dazu gebracht hat, es zu schreiben. Also gibt es "keine Diskussion" darüber;) Und ich weiß, dass die meisten solcher Programme (wie CClenaer usw.) es auch so machen. Also möchte ich dieses Signal nur an Windows-Anwendungen in C++ senden, auch wenn es im Ergebnis ein wenig sinnlos ist. – PolGraphic

Antwort

2

könnte andere Möglichkeit durch die aktive Prozessliste zu durchlaufen sein, und fragt jeden es Workingset zu trimmen, über SetProcessWorkingSetSize (hProcess, (SIZE_T) -1, (SIZE_T) -1), wie here on MSDN beschrieben, möglicherweise Skipping Anwendungen, wenn Sie versuchen, die Leistung einer bestimmten Anwendung zu verbessern (Benchmarking ist absolut Ihr Freund hier).

Dies bewirkt, dass das Betriebssystem virtuelle Seiten auf der Festplatte leeren, physische Speicher für andere Anwendungen frei. Ich bin mir nicht sicher, ob dies SQL Server dazu veranlasst, seine Speicheranforderungen zu lockern, aber es ist sicherlich einen Versuch wert.

0

Es gibt ein paar Links sind die gegebenen von nutzen sein, um Sie auf MSDN:

Hoffentlich können diese Ihnen einen Anfang geben. Die andere Möglichkeit, RAM freizugeben, besteht darin, Windows zu signalisieren, dass jede RAM-Zuteilung für Prozesse auf die Auslagerungsdatei ausgelagert wird, wodurch der physische RAM freigegeben wird. Wenn der Benutzer dann eine bestimmte Anwendung verwendet, wird er vom OS wieder in den physikalischen RAM versetzt, so dass die Verwaltung immer noch größtenteils vom Betriebssystem gehandhabt wird.

+0

Voted für "oben", um es zu neutralisieren;) Traurig, dass ich nicht beide Ihre Antworten markieren konnte, aber ich muss wählen und James Hugard gab eine Lösung, noch gaben Sie einen großen Punkt an, um tiefere Forschung anzufangen. – PolGraphic

+0

Danke für die Abstimmung :) war ehrlich gesagt nur neugierig, liebe James 'Antwort, nette, prägnante und OS freundliche Art und Weise zu tun, Flushes zu virtuellen RAM. – GMasucci