Zamknięcie aplikacji zajmującej > 800MB Ram Vista.
Napisane: niedziela, 8 marca 2009, 17:56
Witam, mam taki problem napisałem sobie taki prosty zapychacz pamięci. Pod Xp wszystko chodzi dobrze, jednak pod Vistą(Win 7) pojawia się problem, system zamyka mi program po zajęciu przez niego ok 800 - 900MB pamięci ram, co stanowi ok 51 - 52% całej pamięci dostępnej.
Co radzicie, teraz muszę odpocząć ale zastawiam się nad utworzeniem procesu, albo kilku by każdy zajmował ok 700MB, by osiągnąć stan ok 70 - 80 % zajętości pamięci.
To wątek wykonujący zapychanie:
PS jeszcze mam takie pytanie bo trochę to dla mnie nie zrozumiałe, jeżeli zahaszuje tą linijkę kodu:
system operacyjny po zakończeniu wątku zwalnia pamięć, jeśli zostawię jak jest w kodzie tego nie zrobi, dlaczego ? Przecież powinno być na odwrót ?!?!
Co radzicie, teraz muszę odpocząć ale zastawiam się nad utworzeniem procesu, albo kilku by każdy zajmował ok 700MB, by osiągnąć stan ok 70 - 80 % zajętości pamięci.
To wątek wykonujący zapychanie:
- Kod: Zaznacz cały
// Trzeci wątek dla pamięci -----------------------------------------------
int __fastcall Obciaz3(Pointer Parameter){
using std::string;
string zapelniacz = "To jest teks to zapelnienia pamieci", kosz, kosz1, kosz2;
int straznik = 0;
Form2->Ram->Visible = true;
TMemoryStatus *MS = new TMemoryStatus;
MS->dwLength = sizeof(MEMORYSTATUS); // tego można nie stosować.
GlobalMemoryStatus(MS);
Form2->Caption = FormatFloat("Całkowita pamięć: #,### KB", MS->dwTotalPhys / 1024);
//delete MS;
do{
straznik = MS->dwMemoryLoad;
GlobalMemoryStatus(MS);
if(straznik < 50)
kosz += zapelniacz;
if(straznik >= 50 || straznik < 60)
kosz1 += zapelniacz;
if(straznik >= 60)
kosz2 += zapelniacz;
Form2->Ram->Caption = "Obciążenie pamięci: " + IntToStr(MS->dwMemoryLoad) + " %";
Application->ProcessMessages();
if(MS->dwAvailPageFile < 102400000)
break;
}while(straznik < 77);
delete MS;
ExitThread(GetExitCodeThread(Obciaz3, NULL)); // usunięcie wątku z pamięci,
//od tego momentu wątku nie można już wstrzymać.
}
//---------------------------------------------------------------------------
PS jeszcze mam takie pytanie bo trochę to dla mnie nie zrozumiałe, jeżeli zahaszuje tą linijkę kodu:
- Kod: Zaznacz cały
//ExitThread(GetExitCodeThread(Obciaz3, NULL));
system operacyjny po zakończeniu wątku zwalnia pamięć, jeśli zostawię jak jest w kodzie tego nie zrobi, dlaczego ? Przecież powinno być na odwrót ?!?!