Français
Source/ Codesnippets

Statische Arrays comme Bereich blitzartig Sauver et magasin: Jonathan's Getrickse

 

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



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

671 Views

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

Themeninformationen

cet Thema hat 1 participant:

p.specht (2x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie