- 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$)
;---------------------------------------------------------------------------------------------
Gruss
Helle