![]() |
Verhinden des Memory ausgelagert wird
Hi Leute
Wie kann ich verhindern des der Speicher den ich reserviere in die Auslagerungsdatei geschrieben wird. Also wenn ich GetMem(1) mache dann will ich das dieses Byte direkt im Memory steht also nicht in die auslagerungsdatei geschreiben wird. Damit ich schnell auf diese Daten zugreifen kann. Geht des oder verhindert des Windows? |
Re: Verhinden des Memory ausgelagert wird
weshalb willste denn das? schnell auf 'ne variable zugreifen, wenn du nicht drauf zugreifst ... :gruebel: :gruebel: :gruebel: :gruebel:
|
Re: Verhinden des Memory ausgelagert wird
Hallo,
![]() Gruß xaromz |
Re: Verhinden des Memory ausgelagert wird
Hallo,
ich allociere und fixe meinen Speicher so: H:=GlobalAlloc(GMEM_FIXED, Bytes+2); if H=0 then MemoryOverFlow; P:=GlobalLock(H); Damit müsste das Auslagern auch disabled sein. Hope it helps. Beste Grüße, Uwe |
Re: Verhinden des Memory ausgelagert wird
Zitat:
kann ich auch irgendwie feststellen ob des dann auch wirklich im ram liegt? (also so zum testen ob des in meiner app funkt) edit: aja und warum eigentlich Bytes+2? |
Re: Verhinden des Memory ausgelagert wird
If you really want to lock memory, you can grant your process the SeLockMemoryPrivilege privilege and use the AWE functions to allocate non-pageable memory. |
Re: Verhinden des Memory ausgelagert wird
was ist AWE?
|
Re: Verhinden des Memory ausgelagert wird
|
Re: Verhinden des Memory ausgelagert wird
so hab des mal am besten mit taskmanager getestet und bei der obrigen methode scheint es nicht zu funzen.
@Dax: geht es da nicht um den M$ SQL Server? und wie man des bei dem einstellt |
Re: Verhinden des Memory ausgelagert wird
Huch, Tatsache... Hab den Link oben korrigiert.
|
Re: Verhinden des Memory ausgelagert wird
ja des schaut schon besser aus aber:
Zitat:
|
Re: Verhinden des Memory ausgelagert wird
Zitat:
Zitat:
Beste Grüße, Uwe |
Re: Verhinden des Memory ausgelagert wird
Zitat:
|
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 ;) |
Re: Verhinden des Memory ausgelagert wird
Zitat:
und wie stell ich des am besten mit der AWE-Funktion an? //Edit: hab des jetzt mal so getest
Delphi-Quellcode:
aber des scheint nicht zu funktionieren (Laut Task-Manager)
VirtualAlloc(P, 100*1024*1024, MEM_RESERVE or MEM_PHYSICAL, 0);
|
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 |
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.
|
Re: Verhinden des Memory ausgelagert wird
Zitat:
aber ausgelagert kann er dennoch werden. Zitat:
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. |
Re: Verhinden des Memory ausgelagert wird
Zitat:
versteh ich nicht ... gebe ich nicht mit MEM_PHYSICAL an des ich pysikalischen Speicher haben will :gruebel: |
Re: Verhinden des Memory ausgelagert wird
:duck:
|
Re: Verhinden des Memory ausgelagert wird
|
Re: Verhinden des Memory ausgelagert wird
Das war ein push von mir
|
Re: Verhinden des Memory ausgelagert wird
also, ich hab mir mal den Democode aus'm PSDK nach Delphi übersetzt
(mein Englisch ist übrigens auch sehr bescheiden :oops: ) und es funktioniert wunderbar (jedenfalls wenn man noch eine "normale" Speicherresservierung als Reserve mit einbaut), aaaaber dieses ist in einem normalem Programm sogut wie unnütz, denn wie im MSDN/PSDK steht, muß dieses auch noch im Windows aktivert sein und ich denk mal bei 99% der PCs ist dieses nicht der Fall. Zitat:
Zitat:
allerding weiß ich jetzt nicht obWindows den speicher nicht doch auslagern kann und vorallem was passiert beim Ruhezustand/Hypernate, weil da muß windows doch auslagern, oder es geht was nicht :? |
Re: Verhinden des Memory ausgelagert wird
Es gibt auch noch die Möglichkeit, eine RAMDISK einzurichten.(MS-RAMDRIVE)
Maximale Grösse: 32 MB. A ramdisk can perfectly be used to store : - web content of web servers. - temporary index files and tables of database servers ( MS-SQL-Server , MySQL , ...). - temporary files ( TEMP and TMP environment variable ) and "Temporary Internet Files". - the scratch disk for Adobe (R) Photoshop (R). - games and installed programs (1). The startup times of programs may decrease drastically ! - audio and video capture / editing. - creation and playback of slide shows. - data that has to be written to CD , to prevent underrun during the burn process. - as storage of the "ReadyBoost" cache on Vista. - all kinds of data that may be lost ( or MUST be lost for security reasons ) at shutdown. ![]() ![]() ![]() RAMDisk , depending on the RAM memory size that the OS supports , to up to 64 GB. |
Re: Verhinden des Memory ausgelagert wird
ah danke des mit der Ramdisk werd ich mir mal anschauen
|
Re: Verhinden des Memory ausgelagert wird
Zitat:
Aber mal eine Frage, wofür genau benötigst du dieses? (für was und vorallem wieviel) |
Re: Verhinden des Memory ausgelagert wird
Zitat:
Zitat:
Nicht viel ... 5 MB vllt. des muss ich erst testen was am besten ist |
Re: Verhinden des Memory ausgelagert wird
Zitat:
Das Problem ist halt, daß erstmal nicht jeder gleich damit arbeitet (drum hab ich auch den den übersetzten Code nicht gepostet) Stell dir mal vor jeder fängt plötzlich damit an ... und ganz schnell wäre Windows am Abstürzen, weil ihm der Speicher ausgeht. dieser Rechner hier hat z.B. keine Auslagerungsdatei (wegen Problemen mit einer zulangsamen Festplatte) und nur 500 MB RAM, also alles nur physischen Speicher und du kannst mir glauben, ich hab schon oft erlebt wie hier alles am verreckn ist, wenn der freie RAM ausgeht schneller Puffer: wenn du oft genug und/oder mit nicht all zu großen Pausen auf deinen Speicher zugreifst, dann lagert den Windows auch (wenn möglich) nicht aus (dieser bleibt also auch ohne das zu tun im RAM). Und was das AWE betrifft: wie gesagt, dieses muß erst vom Admin im Windows aktiviert werden (standardmäßig ist es auf allen Windowssystemen abgeschaltet) heißt: im Gruppenmanager das häckchen setzen, Rechner neu starten und erst dann haben Programme die Möglichkeit dieses zu nutzen. |
Re: Verhinden des Memory ausgelagert wird
Naja ich werds doch so lassen und darauf hoffen des windows es im speicher lässt.
Jaja und des Prob ist nicht die Zeit sondern: Wenn der Buffer ausgelagert wird Daten -> Buffer (wird auf festplatte ausgelagert) = schreibzugriff auf festplatte um buffer auszulagern Buffer -> Auf Festplatte kopieren (in die richtige datei) lesezugriff um ausgelagerten buffer zu lesen schreibzugriff um buffer in datei zu schreiben Wenn der Buffer NICHT ausgelagert wird Daten -> Buffer (steht im Speicher) = buffer bleibt im ram Buffer -> Auf Festplatte kopieren (in die richtige datei) lesezugriff vom ram um buffer auszulesen (geht viel schneller da die fesplatte sowieso genug zu tun hat) schreibzugriff auf festplatte um buffer in datei zu schreiben Es geht darum bei großen und vielen Dateien die Festplatten performance besser zu nutzen |
Re: Verhinden des Memory ausgelagert wird
Zitat:
Außerdem prüfe ich vorher, ob es das System "zu sehr" beeinträchtigen könnte (genug freier physikalischer Speicher) und ich hab mir eine alternative virtuelle Ausweichvariante mit integriert. und auch wenn der Code soweit funktioniert (Programm läuft einwandfrei) bin ich dennoch am Testen ob es nicht irgendwelche Nachteile für andere Programme gibt und wie ich die Grenzwerte am Besten festlege. mein FileSpliter ist ja jetzt schon nicht grad nett zum PC und läßt die Platte glühen :oops: abgesehn davon wird das AWE bei meinem Program eh sehr selten genutzt werden, da es schließlich fast immer deaktivert sein wird -.-'' (ich hab's eigentlich auch nur aus Spieltrieb eingebaut ... jedenfalls hätte ich mir im Normalfall nicht die Arbeit gemacht um erst rauszufinden wie es geht) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr. |
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