| |
|
|
p.specht
| El erforderlichen Schritte para schnellen Abspeichern y Laden de statisch definierten Arrays konstanter Elemente-Longitud son dank @Jonathan´s Trick nun geklärt. Anbei una erstes Demoprogramm. Achtung: Pfade son a el jeweiligen Gegebenheiten anzupassen - Verwendung en propio Gefahr!!!
Anmerkung: En extremo großen Arrays stößt dieses Verfahren wegen des doppelten Speicherplatzbedarfs a Dimenionierung des Dummy-Bereichs# a Speichergrenzen. Für normale Verhältnisse es lo aber geschwindigkeitsmäßig en una echten Durchbruch, no sólo una gute Behelfslösung (getestet en XProfan 11 Interpreter y Compiler bajo Win7-64 SP1).
Título de la ventana "TEIL I: LONG-ARRAY IN EINE BINÄRDATEI SCHREIBEN"
' (D) Demoware "ARRAYS BINÄR SPEICHERN" by P. Pájaro carpintero, Wien, basierend en el
' Trick "BEREICHSDIMENSIONIERUNG VOR STARTPOINTERUMLEITUNG" (C)2013-01 by JONATHAN
' siehe dazu: ./../../sys/?nohdr=1&u=www.paules-pc-forum.de/forum/951187-post4.html
Font 2:Selección aleatoria:Cls rnd(8^8)
' Testgröße festlegen
var n&=21
Declarar Overlay#, Overlay_oldAdress&, A&[n&]
' Mit Testwerten ocupar:
A&[] = n& - &Index
'======== JONATHAN's TRICK, Teil 1 v.2 =======
' Quelle: ./../../sys/?nohdr=1&u=www.paules-pc-forum.de/forum/951187-post4.html
' Zona en Longitud Testarray separat invertir,
Dim Overlay#,@SizeOf(A&[])*4
' Beginn merken,
Overlay_oldAdress& = Overlay#
' entonces Startadresse en Testarray biegen:
Overlay# = @Addr(A&[0])
'=============================================
' Elementzahl y Bereichsgröße Mostrar:
Imprimir @SizeOf(Overlay#)
Imprimir @SizeOf(A&[])
' Testhalber en el Array una Valor ändern:
A&[0]=1234567
' Zeigen, daß dadurch el Zona geändert wurde:
WhileLoop 0,(@SizeOf(Overlay#)/4)-1
Imprimir @Largo(Overlay#,&bucle*4),
EndWhile :imprimir
' Testhalber una Largo en el Zona escribir:
Largo Overlay#,(2 +1)*Sizeof(A&[0]) = 4444444
' Zeigen, daß dadurch el Array geändert wurde:
WhileLoop 0,@SizeOf(A&[])-1
Imprimir A&[&Loop],
EndWhile :imprimir
' Mostrar el Bereichsgröße, el en Platte geschrieben se
imprimir SizeOf(Overlay#)
' Zona en Platte escribir:
BlockWrite getenv$("USERPROFILE")+"\\desktop\\A&.ary",OverlaY#,0,SizeOf(Overlay#)
'======== JONATHAN's TRICK, Teil 2 v.2 =======
' Zona en alte Startadresse conjunto ...
Overlay# = Overlay_oldAdress&
' y el hay reservierten Speicherbereich liberación
Disponer Overlay#
'=============================================
' Das erste Array löschen
Claro a&[]
imprimir "OK"
WaitInput
'=============================================
' TEIL II
'=============================================
Título de la ventana "TEIL II: EINLESEN DES SO GESPEICHERTEN LONG-ARRAYS VON PLATTE"
' (D) Demoware 2013-01 "ARRAYS BINÄR EINLESEN" by P. Pájaro carpintero, Wien, basierend en el
' Trick "BEREICHSDIMENSIONIERUNG VOR STARTPOINTERUMLEITUNG" (C)2013-01 by JONATHAN
Imprimir
Imprimir " Einlesen en neues Array b&[] "
Declarar Expediente$,LastAddress&,fs&
Expediente$=getenv$("USERPROFILE")+"\\desktop\\"+"A&.ary"
fs&=FileSize(Expediente$)
Imprimir " Dateiname: ";Datei$
Imprimir " Filesize = ";fs&
Declarar Zona#, B&[fs&\4-1]
'======== JONATHAN's TRICK, Teil 1 v.2 =======
Dim Zona#,fs&
LastAddress&=Zona#
' BEGINN DES AUSREICHEND DIMENSIONIERTEN ARRAYS AUF DAS NEUE ARRAY SETZEN
Zona#=addr(b&[0])
'=============================================
' EINLESEN
@BlockRead(Expediente$,Zona#,0,fs&)
' ANZEIGEN
imprimir fs&
imprimir @SizeOf(B&[])
WhileLoop 0,@SizeOf(B&[])-1
Imprimir B&[&Loop],
EndWhile
imprimir
imprimir
Imprimir " ^^^ BITTE VERGLEICHEN MIT ORGINAL ^^^ "
waitinput
Imprimir
Imprimir " Zona se nun manipuliert, en Array a verändern"
Imprimir " y así el Überlagerung a beweisen: "
Largo Zona#,0*SizeOf(b&[0]) = n&
Largo Zona#,3*SizeOf(b&[0]) = n&-3
imprimir
WhileLoop 0,@SizeOf(B&[])-1
Imprimir B&[&Loop],
EndWhile :imprimir
'======== JONATHAN's TRICK, Teil 2 v.2 =======
' Überlagerung aufheben:
Zona#=LastAddress&
disponer Zona#
'=============================================
clear B&[]
Imprimir
Imprimir " Gracias! "
imprimir
imprimir " Testdatei löschen? J/N ";
var jn$=""
input jn$
if left$(upper$(jn$),1)="J"
Asignar #4,Expediente$
ERASE #4
beep
imprimir
imprimir " "+Expediente$+" gelöscht."
endif
Imprimir
imprimir " Man sieht se! "
WaitInput 10000
FIN
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 08.05.2021 ▲ |
|
|
|
|
p.specht
| Benchmark para una Largo-Matrix A&[ 1024 , 1024 ] ~ 41.943.040 Byte (40 MB): - Declarar: 94 ms - Elemente en &index conjunto: 65,1 Sek. - Matrix linear en Platte escribir: 390 ms - Einlesen de Platte en una más Array: 31 ms - El Arrays vergleichen: 139 Sek. |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 08.05.2021 ▲ |
|
|
|