Domanda

Sono in esecuzione di un programma in modalità utente su priorità normale. Il mio programma è alla ricerca di un problema NP, e, di conseguenza, consuma molta memoria che alla fine finisce nel file di swap.

Poi il mio mouse si blocca, e ci vuole sempre per task manager di aprirsi e di lasciarmi terminare il processo.

Quello che voglio sapere è come posso fermare il mio sistema operativo Windows da completamente rinchiudere da questo, anche se vengono utilizzati solo 1 su miei 2 core.

Modifica: Grazie per le risposte.

So che lo rende utilizzano meno memoria aiuterà, ma semplicemente non ha senso per me che l'intero sistema operativo dovrebbe bloccarsi.

È stato utile?

Soluzione

Il problema è che quando un altro programma (ad esempio explorer.exe) sta per eseguire, tutto il suo codice e la memoria è stato scambiato. Per fare spazio per l'altro programma di Windows deve scrivere prima i dati che il programma sta utilizzando su disco, quindi caricare la memoria di un altro programma. Ogni nuova pagina di codice che viene eseguito in un altro programma richiede l'accesso al disco, inducendolo a correre lentamente.

Non conosco il modello di accesso del programma, ma sto cercando di indovinare che tocca tutte le sue pagine di memoria molto in modo casuale, il che rende il problema peggiore perché non appena di Windows espelle una pagina di memoria dal vostro programma, improvvisamente se ne ha bisogno e Windows deve trovare qualche altra pagina di dare lo stesso trattamento.

Per dare altri processi più RAM in cui vivere, è possibile utilizzare SetProcessWorkingSetSize per ridurre la quantità massima di RAM che il programma può utilizzare. Naturalmente questo renderà il vostro programma eseguito più lentamente perché ha a che fare più swapping.

Un'altra alternativa si può provare è quello di aggiungere più unità al sistema, e distribuire i file di swap su quelli. Si può avere una CPU dual-core, ma hai solo una singola unità. Distribuire il file di swap su più unità consente a Windows di bilanciare il lavoro su di essi (anche se non ho esperienza di prima mano di come lo fa).

Altri suggerimenti

La risposta ovvia è "usa meno memoria". Quando la tua applicazione utilizza tutto lo la memoria disponibile, il sistema operativo deve pagina il task manager (ecc) per fare spazio per la tua app. Quando si passa programmi, il sistema operativo deve pagina gli altri programmi nel (in quanto sono necessari). Letture disco sono più lento di memoria di legge, quindi tutto sembra essere andare più lento.

Se si vuole evitare questo, la tua app gestire la propria memoria, o usare un algoritmo migliore di forza bruta. (Ci sono genetiche algoritmi, annealing simulato, ecc.)

Non credo che ci sia una risposta a questa domanda di programmazione, oltre a "ristrutturare la vostra applicazione per utilizzare meno memoria." Il problema file di swap è molto probabilmente dovuto il collo di bottiglia nell'accesso al disco, in particolare se si sta utilizzando un HDD IDE o un file di swap molto frammentato.

E 'un po' estrema, ma si può sempre ridurre al minimo il file di swap in modo da non avere tutto il thashing del disco, e il programma non è permesso di allocare molta memoria virtuale. Sotto Pannello di controllo / / scheda Avanzate / Perfromance / La memoria virtuale avanzata, impostare il file di paging per dimensioni personalizzate e immettere un valore di 2mb (minima consentita su XP). Quando un allocazione fallisce, si dovrebbe ottenere una deroga ed essere in grado di uscire con grazia. Non riesco però a risolvere il problema, basta accelera in su;)

Un altro aspetto da prendere in considerazione sarebbe se siete piattaforma a 32 bit ona, porta ad un sistema a 64 bit e ottenere una scatola con molta più RAM indirizzabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top