Frage

Ich bin ein Benutzermodus-Programm auf normale Priorität ausgeführt wird. Mein Programm ist ein NP-Problem suchen, und als Ergebnis, verbraucht viel Speicher auf, die schließlich in die Auslagerungsdatei endet.

Dann meine Maus friert, und es dauert ewig für die Task-Manager zu öffnen, und lassen Sie mich den Prozess beenden.

Was ich wissen möchte, ist, wie ich meine Windows-Betriebssystem stoppen kann von vollständig von dieser Einsperren, obwohl nur 1 aus meinem 2 Kerne verwendet werden.

Edit: Danke für die Antworten.

Ich weiß, dass es weniger Speicher wird dazu beitragen, verwenden zu machen, aber es macht einfach keinen Sinn für mich, dass das gesamte OS einsperren sollte.

War es hilfreich?

Lösung

Das Problem ist, dass, wenn ein anderes Programm (z explorer.exe) ausführen wird, die alle ihren Code und Speicher ausgelagert wurden. Um Platz für das andere Programm zu machen Windows verfügt, um erste Daten zu schreiben, die Ihr Programm auf der Festplatte verwendet, dann laden die anderen Programmspeicher. Jede neue Seite von Code, der in dem anderen Programm ausgeführt wird, erfordert Plattenzugriff, so dass es langsam laufen.

Ich weiß nicht, das Zugriffsmuster des Programms, aber ich vermute, es berührt alle seine Speicherseiten eine Menge in einer zufälligen Art und Weise, die das Problem noch schlimmer, denn sobald Windows-evicts eine Speicherseite aus dem macht Programm, plötzlich müssen Sie es wieder und Windows hat eine andere Seite zu finden, die gleiche Behandlung zu geben.

andere Prozesse zu geben, mehr RAM zu leben, die Sie verwenden können SetProcessWorkingSetSize die maximale Menge an RAM zu reduzieren, die das Programm verwenden. Natürlich wird dies Ihren Programmlauf langsamer machen, weil es mehr Austausch zu tun hat.

Eine weitere Alternative, die Sie könnten versuchen, mehr Laufwerke zu dem System hinzuzufügen, und verteilen Sie die Auslagerungsdateien über diese. Sie haben einen Dual-Core-CPU, aber Sie haben nur ein einziges Laufwerk. Die Verteilung der Auslagerungsdatei über mehrere Laufwerke ermöglicht Windows-Arbeit über sie zu balancieren (obwohl ich nicht aus erster Hand Erfahrung haben, wie gut es dies der Fall ist).

Andere Tipps

Die offensichtliche Antwort ist „weniger Speicher verwenden“. Wenn Ihre App verbraucht alle verfügbare Speicher, haben die OS auf Seite der Task-Manager (etc.) Raum für Ihre Anwendung zu machen. Wenn Sie Programme wechseln, hat das Betriebssystem auf Seite in den anderen Programmen zurück (wie sie benötigt werden). Disk liest langsamer als Speicher liest, so dass alles scheint zu sein, geht langsamer.

Wenn Sie dies vermeiden wollen, müssen Sie Ihre App einen eigenen Speicher verwalten, oder verwenden, um einen besseren Algorithmus als Brute-Force. (Es gibt genetische Algorithmen, simuliertes Glühen, usw.)

Das glaube ich nicht, dass es eine Programmierung Antwort auf diese Frage, abgesehen von „Umstrukturierung Ihrer App weniger Speicher zu verwenden.“ Das swapfile Problem ist höchstwahrscheinlich aufgrund der Engpass in die Datenträger zugreifen, vor allem, wenn Sie eine IDE-Festplatte oder eine stark fragmentierte Auslagerungsdatei verwenden.

Es ist ein bisschen extrem, aber man konnte immer Ihre Auslagerungsdatei minimieren, so dass Sie nicht die ganze Scheibe thashing haben, und das Programm wird nicht zuzuteilen viele virtuellen Speicher erlaubt. Unter Systemsteuerung / Erweitert / Registerkarte Erweitert / Perfromance / Virtueller Speicher, stellen Sie die Auslagerungsdatei, um benutzerdefinierte Größe und geben Sie einen Wert von 2 MB (kleinste auf XP erlaubt). Wenn eine Zuordnung fehlschlägt, sollten Sie eine Ausnahme erhalten und anmutig Lage Ausfahrt sein. Es ist nicht ganz Ihr Problem beheben, nur beschleunigt sie;)

Eine andere Sache, eine Überlegung wert wäre, wenn Sie ona 32-Bit-Plattform, Port mit einem 64-Bit-System sind und eine Box mit viel mehr adressierbaren RAM erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top