Seite 1 von 1

Alternative zu AllocateMemory

Verfasst: 08.09.2007 13:39
von Helle
Wenn´s im Programm
- Speicher zu reservieren gilt,
- mal wieder auf jede Micro-Sekunde ankommt,
- eigentlich nicht nötig ist, den reservierten Speicher mit Nullen zu füllen,
können nachfolgende API-Funktionen genutzt werden:

Code: Alles auswählen

;- Alternative zu AllocateMemory(), für Speicher-Bedarf bis 500KB; ab hier greifen andere Mechanismen
;- Der reservierte Speicher wird zur Zeit-Einsparung nicht mit Nullen aufgefüllt
;- "Helle" Klaus Helbing, 08.09.2007, PB4.02
;- Die Variante über Handle einen Pointer zu ermitteln wird allgemein favorisiert
;- Local oder Global spielt keine Rolle
;- Für Strings beachten: Das End-Zero-Byte ist bei Bedarf selbst zu setzen!

;- Version mit AllocateMemory() von PB
For m=10000 To 1010000 Step 50000
 TA=ElapsedMilliseconds() 
  For z=1 To 25000
   pMem=AllocateMemory(m)    ;das Bekannte

  ;Code

   FreeMemory(pMem)          ;für Testschleife, erledigt zum Programm-Ende PB selbst 
  Next z
 TE=ElapsedMilliseconds()-TA
 Mess1$+Str(m)+" Bytes : "+Str(TE)+" ms"+#LFCR$
Next m
;---------------------------------------------------------------------------------------------
;- Version mit API über Handle; Parameter 2 = nicht mit Nullen auffüllen, 66 = auffüllen
;- Weitere Parameter bleiben hier unberücksichtigt
For m=10000 To 1010000 Step 50000
 TA=ElapsedMilliseconds() 
  For z=1 To 25000
   hMem=LocalAlloc_(2,m)     ;zuerst Handle ermitteln, hier auch Test auf Null (Gültigkeit)
   pMem=LocalLock_(hMem)     ;Speicher-Bereich fixieren und Pointer auf Speicher-Beginn 

   ;Code

   LocalUnlock_(hMem)        ;zum Ende des Programmes alles wieder freigeben    
   LocalFree_(hMem)
  Next z
 TE=ElapsedMilliseconds()-TA
 Mess2$+Str(m)+" Bytes : "+Str(TE)+" ms"+#LFCR$
Next m
;---------------------------------------------------------------------------------------------
MessageRequester("Speicher reservieren", "PB : "+#LFCR$+Mess1$+#LFCR$+"API :  "+#LFCR$+Mess2$)
;---------------------------------------------------------------------------------------------
Der Test kann einige Sekunden dauern!

Gruss
Helle