Esaurire il limite di commit mentre hai ancora molta RAM disponibile non è affatto insolito. Né il limite di commit né il costo di commit sono direttamente correlati alla RAM libera o disponibile.
Il limite di commit = dimensione del file di paging corrente + dimensione della RAM.
Poiché non si dispone di un file di paging, il limite di commit è inferiore rispetto a quello che si avrebbe se si disponesse di un file di paging. Non importa quanta RAM è libera . Per il limite di commit, conta solo la quantità di RAM installata . Puoi esaurire il limite di commit anche con il 90% della RAM libera o disponibile.
Commit charge è un conteggio della memoria virtuale, non fisico. Supponiamo che il mio programma richieda 2 GB impegnati, ma poi accede solo a 5 GB. I restanti 1,5 GB non ricevono mai errori, non vengono mai assegnati alla RAM, quindi l'utilizzo della RAM non riflette i 2 GB, solo 0,5 GB.
Tuttavia, "il commit del sistema" è aumentato di 2 GB perché il sistema ha "impegnato" che ci sarà un posto per contenere i miei 2 GB, se dovessi effettivamente averne bisogno. Il fatto che su una determinata esecuzione del programma non proverò necessariamente a usarlo tutto non aiuta. Ho chiesto 2 GB e il successo del ritorno da quella chiamata mi dice che il sistema operativo "ha commesso" - cioè promesso - che posso usare così tanto spazio di indirizzi virtuale. Il sistema operativo non può fare questa promessa a meno che non ci sia un posto per mantenere tutto.
Quindi: rimetti il tuo file di paging, aggiungi più RAM o esegui meno roba contemporaneamente. O una combinazione dei tre. Queste sono le uniche opzioni per evitare gli errori "memoria insufficiente" e "memoria insufficiente".
Vedi anche le mie risposte qui (più a lungo) e qui (molto più a lungo).