Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

dział ogólny

Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postprzez GoldWolf » 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:
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 ?!?!
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postprzez Cyfrowy Baron » niedziela, 8 marca 2009, 19:09

Co radzicie,...


Ja doradzam dać sobie spokój z systemem VIsta, gdyż doświadczenie pokazuje, że nie zadomowił się ten system w Polsce, wciąż popularniejszy jest Windows XP. Co do systemu Windows 7 to trzeba jeszcze poczekać, gdyż an razie dostępne są tylko wersje BETA, a poza tym system wykazuje duże podobieństwo do systemu Vista, więc istnieje duże prawdopodobieństwo, że ten system również się nie przyjmie.

Co do jakiejś praktycznej porady, to może dodaj funkcje AntiKill - ► patrz serwis: Cyfrowy Baron dział: porady -> API -> AntiKill - blokowanie możliwości zamknięcia procesu przez inny proces.
To może jednak nie zadziałać, gdyż po pierwsze proces jest zamykany przez system, a jak wiadomo system ma specjalne uprawnienia, a po drugie nie wiadomo jak ten kod zachowa się w systemie Vista, wogóle niewiele wiadomo o systemie Vista...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4724
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 443
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postprzez GoldWolf » niedziela, 8 marca 2009, 20:17

Głównie chodzi mi o W7, a napisałem Vista bo stabil jest w odróżnieniu od bety 7, tak czy siak muszę ten system jakoś oszukać ....
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postprzez Witold » poniedziałek, 9 marca 2009, 16:11

Dante napisał(a):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 ?!?!


Jeżeli dobrze myślę to chodzi o to:

MSDN: ExitThread napisał(a):Remarks

ExitThread is the preferred method of exiting a thread in C code. However, in C++ code, the thread is exited before any destructors can be called or any other automatic cleanup can be performed. Therefore, in C++ code, you should return from your thread function.
http://msdn.microsoft.com/en-us/library/ms682659.aspx
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postprzez GoldWolf » niedziela, 19 kwietnia 2009, 17:11

Mam taki błąd, może ktoś wie z czym to jest związane.
Obrazek
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamknięcie aplikacji zajmującej > 800MB Ram Vista.

Nowy postprzez GoldWolf » czwartek, 14 maja 2009, 13:49

Obszedłem ten problem w taki sposób, iż napisałem sobie dodatkowy program, który obciąża pamięć do ok 650MB i potem uruchamia sam siebie. Trwa to tak długo, aż całkowity rozmiar pamięci będzie obciążony w 80%.

Testowałem na XP, to aplikacja spokojnie 2,4GB może mieć, być może w przyszłości uda mi się wpaść na inne rozwiązanie.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron