Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Verhinden des Memory ausgelagert wird (https://www.delphipraxis.net/103173-verhinden-des-memory-ausgelagert-wird.html)

gsh 11. Nov 2007 21:31

Re: Verhinden des Memory ausgelagert wird
 
ja des schaut schon besser aus aber:
Zitat:

Address Windowing Extensions (AWE) is a set of extensions that allows an application to quickly manipulate physical memory greater than 4GB. Certain data-intensive applications, such as database management systems and scientific and engineering software, need access to very large caches of data. In the case of very large data sets, restricting the cache to fit within an application's 2GB of user address space is a severe restriction. In these situations, the cache is too small to properly support the application.
der erste absatz sagt mir eigtlich schon des dieses AWE system eigentlich nur dafür da ist die 2GB grenze bei XP zu umgehen

Uwe.F. 11. Nov 2007 21:34

Re: Verhinden des Memory ausgelagert wird
 
Zitat:

Zitat von gsh
kann ich auch irgendwie feststellen ob des dann auch wirklich im ram liegt? (also so zum testen ob des in meiner app funkt)

Getestet habe ich es nie. Ich musste Audiodaten von einer Karte holen. Wenn diese ausgelagert gewesen wären, hätte ich sicherlich Aussetzer gehabt. Hatte ich aber nie.

Zitat:

Zitat von gsh
edit: aja und warum eigentlich Bytes+2?

Historische Gründe - kannst Du weglassen.

Beste Grüße,
Uwe

gsh 11. Nov 2007 21:36

Re: Verhinden des Memory ausgelagert wird
 
Zitat:

Zitat von Uwe.F.
Getestet habe ich es nie. Ich musste Audiodaten von einer Karte holen. Wenn diese ausgelagert gewesen wären, hätte ich sicherlich Aussetzer gehabt. Hatte ich aber nie.

naja nur weil es funktioniert heißt nicht des es immer funkt. es kann ja sein des diese funktion manchmal den memory in den ram ablegt manchmal aber auch in der auslagerungsdatei

Dax 11. Nov 2007 21:42

Re: Verhinden des Memory ausgelagert wird
 
Mit GlobalAlloc/VirtualLock kannst du dem Speichermanager lediglich Tips geben, ob ein bestimmter Speicherbereich während der Ausführungszeit des Programms nicht ausgelagert werden darf, nicht hingegen, dass dieser Speicher immer im Ram zu halten ist. Das kannst du nur umgehen, indem du direkt in den Paging-Prozess von Windows eingreifst - mittels der AWE-Funktionen - und so direkt verhinderst, dass ein Bereich des physischen Speichers bis auf weiteres für überhaupt irgendwas anderes benutzt werden kann.

Das steht aber auch so in dem vom xaromz verlinkten Artikel ;)

gsh 11. Nov 2007 21:47

Re: Verhinden des Memory ausgelagert wird
 
Zitat:

Zitat von Dax
Mit GlobalAlloc/VirtualLock kannst du dem Speichermanager lediglich Tips geben, ob ein bestimmter Speicherbereich während der Ausführungszeit des Programms nicht ausgelagert werden darf, nicht hingegen, dass dieser Speicher immer im Ram zu halten ist. Das kannst du nur umgehen, indem du direkt in den Paging-Prozess von Windows eingreifst - mittels der AWE-Funktionen - und so direkt verhinderst, dass ein Bereich des physischen Speichers bis auf weiteres für überhaupt irgendwas anderes benutzt werden kann.

Das steht aber auch so in dem vom xaromz verlinkten Artikel ;)

hmmm ja ok

und wie stell ich des am besten mit der AWE-Funktion an?

//Edit: hab des jetzt mal so getest
Delphi-Quellcode:
VirtualAlloc(P, 100*1024*1024, MEM_RESERVE or MEM_PHYSICAL, 0);
aber des scheint nicht zu funktionieren (Laut Task-Manager)

Uwe.F. 11. Nov 2007 22:10

Re: Verhinden des Memory ausgelagert wird
 
Habe noch mal in die W32-Hilfe gesehen:

The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object's memory block. The memory block associated with a locked memory object cannot be moved or discarded.

Wenn der Memoryblock nicht verschoben werden kann, wird er meines Erachtens auch nicht ausgelagert.
Meine Applikation funktioniert jedenfalls seit 10 Jahren ohne Ausfall (unter der Annahme, dass ausgelagerter Speicher nicht innerhalb 20 Millesekunden nachgeladen ist).

Beste Grüße,
Uwe

Luckie 11. Nov 2007 22:21

Re: Verhinden des Memory ausgelagert wird
 
Warum darf der Speicherbereich denn nicht ausgelagert werden? Mir ist bisher noch keine Situation untergekommen, wo das schlecht gewesen wäre.

himitsu 12. Nov 2007 01:57

Re: Verhinden des Memory ausgelagert wird
 
Zitat:

Zitat von Uwe.F.
Wenn der Memoryblock nicht verschoben werden kann, wird er meines Erachtens auch nicht ausgelagert.

nicht korrekt, es kann nur im virtuellen Speicherraum der Anwenung weder verschoben noch freigegeben werden,
aber ausgelagert kann er dennoch werden.


Zitat:

Zitat von gsh
//Edit: hab des jetzt mal so getest
Delphi-Quellcode:
VirtualAlloc(P, 100*1024*1024, MEM_RESERVE or MEM_PHYSICAL, 0);
aber des scheint nicht zu funktionieren (Laut Task-Manager)

hast du dir mal im MSDN die Texte zu Managing AWE Memory durchgelesen?

damit reservierst du nur 'ne Stelle im Virtuellen Speicherraum der Anwendung
den physischen Speicher mußt du extra resevieren und dann auch noch an dieser Stelle einblenden.

gsh 12. Nov 2007 12:26

Re: Verhinden des Memory ausgelagert wird
 
Zitat:

Zitat von himitsu
hast du dir mal im MSDN die Texte zu Managing AWE Memory durchgelesen?

damit reservierst du nur 'ne Stelle im Virtuellen Speicherraum der Anwendung
den physischen Speicher mußt du extra resevieren und dann auch noch an dieser Stelle einblenden.

ja ich hab zumindest versucht alles zu verstehen aber mein englisch ist nicht soooo gut :oops:


versteh ich nicht ... gebe ich nicht mit MEM_PHYSICAL an des ich pysikalischen Speicher haben will :gruebel:

gsh 14. Nov 2007 18:12

Re: Verhinden des Memory ausgelagert wird
 
:duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz