Español
Fuente/ Codesnippets

Statische Arrays como Zona blitzartig speichern y invitar: Jonathan's Getrickse

 

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 11
Computer: 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  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

678 Views

Untitledvor 0 min.
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
R.Schneider28.05.2021
Michael W.28.05.2021
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

p.specht (2x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie