Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 24.01.07 21:25 
Hi,

ich schiebe bei meinem Programm wahnsinnig viele daten in den arbeitsspeicher um schnell darauf zugreifen zu können.. das können gern auch mal 3-4gb daten sein, was natürlich fast jeden Arbeitsspeicher sprengt.. :)

Im moment schaufle ich fröhlich immer weiter rein, bis irgendwann das programm abschmiert mit der Meldung "Nicht genügend Arbeitsspeicher."... wie ich rausbekomme ob noch Speicher da ist, weiß ich soweit... aber weiß jemand wie ich rausbekomme, ob daten ausgelagert werden aus dem RAM?

Ich bräuchte ne funktion welche mir sagt "Wenn du jetzt noch 5mb in den RAM schiebst, landen 3mb des RAMs auf der HDD in der auslagerungsdatei". Weiß jemand wie ich das hinbekomm?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  Memory : TMemoryStatus;
begin
  Memory.dwLength:=SizeOf(Memory);
  GlobalMemoryStatus(Memory);
  Result:=Memory.dwAvailPhys;


So bekomme ich ja z.B. raus wieviel RAM noch zur verfügung steht.. aber wenn die zahl sich der 0 nähert, fängt Windows an auszulagern und sie springt wieder zu 30mb hoch, und das fast endlos oft.. kann also nich einfach testen ob dwAvailPhys <= 0 (oder 5 als toleranz) ist..

Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 24.01.07 23:18 
zweiterlei:

erstens:
musst du dafür sorgen das dein system die auslagerungsdatei (Pagefile) groß genug macht damit soviel überhaupt rein passt.

zweitens:
es gibt eine möglichkeit deinem programm andere rechte zu geben. damit es sich mehr speicher nehmen darf als normal. leider habe ich nicht im kopf wie das ging und die quelltexte auch nicht hier.
aber schau dir mal Suche im MSDN PRIVILEGES und Suche im MSDN SECURITY FUNCTIONS an.
es war irgendwas mir process, token,....

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 24.01.07 23:29 
Ich will aber nicht meinem Programm mehr speicher geben, sondern rausfinden wann Windows anfängt auszulagern ;)

_________________
Aya
I aim for my endless dreams and I know they will come true!
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1338
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 25.01.07 00:41 
schau mal in der WIN32 SDK Hilfe nach Memory Management Functions.
ich hatte beim meinem ersten Post noch was anderes aber ich finde es einfach nicht wieder. :(

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 09.02.07 20:24 
Man kann sich noch mehr Speicherwerte anzeigen lassen und evtl. eine Alarmfunktion
einbauen - visuell oder akustisch.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Timer2Timer(Sender: TObject);
var Memory: TMemoryStatus;
begin
  Timer2.Interval:= 10000;
  Memory.dwLength := SizeOf(Memory);
  GlobalMemoryStatus(Memory);

  //Arbeitsspeicher
  ramtotal1.Caption:=Format('%8.n', [Memory.dwTotalPhys div 1024 + 0.0]);
  //Freier Arbeitsspeicher
  ramfree1.Caption:=Format('%8.n', [Memory.dwAvailPhys div 1024 + 0.0]);
  //Größte Größe der Auslagerungsdatei
  pftotal1.Caption:=Format('%8.n', [Memory.dwTotalPageFile div 1024 + 0.0]);
  //Freier Platz der Auslagerungsdatei
  pffree1.Caption:=Format('%8.n', [Memory.dwAvailPageFile div 1024 + 0.0]);
  //Gesamter Platz des VirtualMemory
  vtotal1.Caption:=Format('%8.n', [Memory.dwTotalVirtual div 1024 + 0.0]);
  //Freier Platz des VirtualMemory
  vfree1.Caption:=Format('%8.n', [Memory.dwAvailVirtual div 1024 + 0.0]);
end;


www.petri.co.il/pagefile_optimization.htm

PageDefrag:

212.162.61.161/downl...73f96ba4a620bcf1d9c9
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 09.02.07 22:07 
Hi,

als Admin oder Benutzer mit Debug-Privilegien kannst Du Dir den Physikalischen Speicher (unter WinNT bis XP, Vista interessiert nicht) ReadOnly als MMF mappen lassen. Damit hast Du u.a. die Möglichkeit, die GDT, LDT und IDT für deinen Prozess (und auch die ganzen anderen) auszulesen und für deine Speicherseiten das Flag "Present" abzufragen ... Ist das für eine bestimmte Seite nicht gesetzt, so wurde diese ausgelagert ...

Wie man auf die Weise in den Kernel-Mode kommt, hab ich bei TheCodeProject letztens erst unter den Augen gehabt ... Dort steht aber u.a. auch das Memoryy Management recht gut erklärt drin ... Zu finden ist der Artikel hier ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.