| |
|
|
p.specht
| qui erforderlichen Schritte zum schnellen Abspeichern et magasin de statisch definierten Arrays konstanter Elemente-Longueur sommes dank @Jonathan´s Trick eh bien geklärt. Anbei un erstes Demoprogramm. attention: Pfade sommes à qui jeweiligen Gegebenheiten anzupassen - Verwendung sur eigene péril!!!
Anmerkung: chez extrem grand Arrays stößt cet procéder à cause de des doppelten Speicherplatzbedarfs zur Dimenionierung des Dummy-Bereichs# à Speichergrenzen. Pour normale Verhältnisse handelt es sich mais geschwindigkeitsmäßig um une echten Durchbruch, pas seulement um une gute Behelfslösung (getestet dans XProfan 11 Interpreter et Compiler sous Win7-64 SP1).
Titre de la fenêtre "TEIL I: LONG-ARRAY IN EINE BINÄRDATEI SCHREIBEN"
' (D) Demoware "ARRAYS BINÄR SPEICHERN" by P. Specht, vienne, basierend sur dem
' Trick "BEREICHSDIMENSIONIERUNG VOR STARTPOINTERUMLEITUNG" (C)2013-01 by JONATHAN
' siehe en supplément: ./../../sys/?nohdr=1&u=www.paules-pc-forum.de/forum/951187-poste4.html
Font 2:Randomiser:Cls rnd(8^8)
' Testgröße festlegen
var n&=21
Déclarer Overlay#, Overlay_oldAdress&, A&[n&]
' avec Testwerten belegen:
A&[] = n& - &index
'======== JONATHAN's TRICK, partie 1 v.2 =======
' source: ./../../sys/?nohdr=1&u=www.paules-pc-forum.de/forum/951187-poste4.html
' Bereich dans Longueur Testarray separat anlegen,
Faible Overlay#,@SizeOf(A&[])*4
' Beginn merken,
Overlay_oldAdress& = Overlay#
' ensuite Startadresse sur Testarray biegen:
Overlay# = @Addr(A&[0])
'=============================================
' Elementzahl et Bereichsgröße Montrer:
Imprimer @SizeOf(Overlay#)
Imprimer @SizeOf(A&[])
' Testhalber im Array une Wert changement:
A&[0]=1234567
' montrer, qui dadurch qui Bereich geändert wurde:
WhileLoop 0,(@SizeOf(Overlay#)/4)-1
Imprimer @Long(Overlay#,&loop*4),
Endwhile :imprimer
' Testhalber un Long dans qui Bereich écrivons:
Long Overlay#,(2 +1)*Sizeof(A&[0]) = 4444444
' montrer, qui dadurch cela Array geändert wurde:
WhileLoop 0,@SizeOf(A&[])-1
Imprimer A&[&Boucle],
Endwhile :imprimer
' Montrer qui Bereichsgröße, qui sur Platte geschrieben wird
imprimer SizeOf(Overlay#)
' Bereich sur Platte écrivons:
BlockWrite getenv$("USERPROFILE")+"\\desktop\\A&.ary",OverlaY#,0,SizeOf(Overlay#)
'======== JONATHAN's TRICK, partie 2 v.2 =======
' Bereich sur vieille Startadresse mettons ...
Overlay# = Overlay_oldAdress&
' et den là reservierten Speicherbereich freigeben
Dispose Overlay#
'=============================================
' cela erste Array effacer
Claire a&[]
imprimer "OK"
WaitInput
'=============================================
' TEIL II
'=============================================
Titre de la fenêtre "TEIL II: EINLESEN DES SO GESPEICHERTEN LONG-ARRAYS VON PLATTE"
' (D) Demoware 2013-01 "ARRAYS BINÄR EINLESEN" by P. Specht, vienne, basierend sur dem
' Trick "BEREICHSDIMENSIONIERUNG VOR STARTPOINTERUMLEITUNG" (C)2013-01 by JONATHAN
Imprimer
Imprimer " Einlesen dans nouveau Array b&[] "
Déclarer Dossier$,LastAddress&,fs&
Dossier$=getenv$("USERPROFILE")+"\\desktop\\"+"A&.ary"
fs&=FileSize(Dossier$)
Imprimer " Dateiname: ";Datei$
Imprimer " Filesize = ";fs&
Déclarer Bereich#, B&[fs&\4-1]
'======== JONATHAN's TRICK, partie 1 v.2 =======
Faible Bereich#,fs&
LastAddress&=Bereich#
' BEGINN DES AUSREICHEND DIMENSIONIERTEN ARRAYS AUF DAS NEUE ARRAY SETZEN
Bereich#=addr(b&[0])
'=============================================
' EINLESEN
@BlockRead(Dossier$,Bereich#,0,fs&)
' ANZEIGEN
imprimer fs&
imprimer @SizeOf(B&[])
WhileLoop 0,@SizeOf(B&[])-1
Imprimer B&[&Boucle],
Endwhile
imprimer
imprimer
Imprimer " ^^^ BITTE VERGLEICHEN MIT ORGINAL ^^^ "
waitinput
Imprimer
Imprimer " Bereich wird eh bien manipuliert, um Array trop verändern"
Imprimer " et avec cela qui Überlagerung trop beweisen: "
Long Bereich#,0*SizeOf(b&[0]) = n&
Long Bereich#,3*SizeOf(b&[0]) = n&-3
imprimer
WhileLoop 0,@SizeOf(B&[])-1
Imprimer B&[&Boucle],
Endwhile :imprimer
'======== JONATHAN's TRICK, partie 2 v.2 =======
' Überlagerung aufheben:
Bereich#=LastAddress&
dispose Bereich#
'=============================================
clear B&[]
Imprimer
Imprimer " merci! "
imprimer
imprimer " Testdatei effacer? J/N ";
var jn$=»
input jn$
si left$(upper$(jn$),1)="J"
Assign #4,Dossier$
ERASE #4
beep
imprimer
imprimer " "+Dossier$+" gelöscht."
endif
Imprimer
imprimer " on voit sich! "
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 pour une Long-Matrix A&[ 1024 , 1024 ] ~ 41.943.040 Byte (40 MB): - Déclarer: 94 ms - Elemente sur &index mettons: 65,1 Sek. - Matrix linear sur Platte écrivons: 390 ms - Einlesen de Platte dans un d'autre Array: 31 ms - qui Arrays comparer: 139 Sek. |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 08.05.2021 ▲ |
|
|
|