Ankündigung

Einklappen
Keine Ankündigung bisher.

So hab' ich mich in Speicherplatzprobleme gebracht - vielleicht hilft's ja jemandem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Codebeispiel] So hab' ich mich in Speicherplatzprobleme gebracht - vielleicht hilft's ja jemandem

    Aus der "normalen" Programmierung bin ich gewohnt, für Funktionen i.d.R. eine Rückgabevariable "result" zu verwenden.

    Nachdem ich relativ viel mit HTML arbeite, um die Ausgabe im Webserver zu optimieren, gibt's z.B. so was:

    [highlight=epc]
    :begin htmlTxtSize(pTxt, pSize)
    :info $Textgröße festlegen $\\
    $txt: string zur Textausgabe$ \\
    $pSize: Textgröße (1..7)$

    //Textgröße festlegen
    :var result@
    result@ = $<font size=$ + convert(pSize,$$) + $>$ + pTxt + $</font>$

    :return result@
    :end
    [/highlight]

    Dieses Makro findet 19x Verwendung, ein ähnliches ist 94x im Einsatz.

    Das heißt, es wurden 115 Strings "xxx_result" angelegt und das brachte wohl den Speicher zum Platzen. Ausgerechnet nach dem Update auf Patch 3.015 und EibStudio 3.011 mit unveränderter Software meinerseits...

    Geändert habe ich es in:

    [highlight=epc]
    :begin htmlTxtSize(pTxt, pSize)
    :info $Textgröße festlegen $\\
    $txt: string zur Textausgabe$ \\
    $pSize: Textgröße (1..7)$

    //Textgröße festlegen

    :return $<font size=$ + convert(pSize,$$) + $>$ + pTxt + $</font>$
    :end
    [/highlight]

    Vielleicht hilft's ja jemandem, diesen oder ähnliche Fehler zu vermeiden...
    Denn dieser "Unfall" führte dazu, dass der EibPC nicht mehr erreichbar war und immer wieder vollkommen resetted werden musste - Das Ganze bei 8m Höhenunterschied zwischen EibPC und Computer, Konditionstraining...

    Aber: Vielleicht kennt Enertex auch einen Weg, den Speicherbedarf schon vor dem Flashen zu überprüfen - dynamisch alloziert dürfte doch eigentlich nicht zu viel werden?

    #2
    Zitat von klaus_kraemer Beitrag anzeigen
    A
    Denn dieser "Unfall" führte dazu, dass der EibPC nicht mehr erreichbar war und immer wieder vollkommen resetted werden musste
    Ich glaube, da liegt ein Irrtum vor. Wäre der Speicher knapp geworden, wäre das schon abgefangen worden bzw. wäre der EibPC erst gar nicht gestartet. Was Du beschreibst (Nicht erreichbar, viele Sekunden für den Webserveraufbau ...) ist das Problem eines Performancefressers.
    Die Strings sind ja "nur" 1400 Bytes, da kann man schon einige definieren (was hatte denn der Compiler gesagt?).
    Das Problem ist eher das Umschiffen des Validierungskonzepts bei "intensiver" (ich schätze mal hundert oder mehr solcher Aufrufe?) :
    die Vewendung der lokalen Variablen ist möglich und schützt den Programmierer vor Fehlern, allerdings werden diese behandelt wie normale globale Variablen, die vom Compiler eine Art Markierung erhalten, sodass Überschneidungen ausgeschlossen sind.
    Globale Variablen wie die Makro-Variablen@ werden pro Zyklus immer ausgewertet, alsbald sich eine der Abhängigkeiten ändert.
    D.h.
    Code:
    result@ = $<font size=$ + convert(pSize,$$) + $>$ + pTxt + $</font>$
    "berechnet" jedesmal den String, wenn sich der im Programm ändert, egal ob Du im Code etwa
    Code:
    if ... then  MyString=htmlTxtSize(pTxt, pSize) endif
    schreibst. Mit dem ersten Makro wäre dieser Code gleich zum Ausdruck:
    Code:
    result@ = $<font size=$ + convert(pSize,$$) + $>$ + pTxt + $</font>$
    if ... then  MyString= result@  endif
    Hier wird nun result@ jedesmal berechnet, wenn sich pTxt oder pSize ändert. Das kostet aufgrund der Stringoperationen und der Menge der Anwendungen pro Zyklus u.U. richtig Rechenzeit.
    Das zweite Makro hingegen ist:
    Code:
    if ... then  MyString= $<font size=$ + convert(pSize,$$) + $>$ + pTxt + $</font>$  endif
    Hier wird nur beim Ausführen von if überhaupt was berechnet, die CPU wird nicht belastet und alles ist gut.
    Der Output des Eibparsers wäre für beide Fälle sehr interessant: bitte mal hier posten
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Zitat von enertegus Beitrag anzeigen
      ....
      Der Output des Eibparsers wäre für beide Fälle sehr interessant: bitte mal hier posten
      Wenn ich denke, dass bei vielen dieser Aufrufe settime() drinsteckt, kann ich mir vorstellen, was da ablief...

      Was meinst Du mit dem "Output des Eibparsers" genau?

      Kommentar


        #4
        Zitat von klaus_kraemer Beitrag anzeigen
        settime()
        Ja, das wird es ziemlich sicher sein. Hatten wir ja schon mal, dass jemand jeden Webbutton mit 2 oder mehr Timern zurückgesetzt hat (im Makro passiert das leicht), sodass dann mehrere hundert Timer liefen....
        Ich meine den Compiler-Output im Meldungenfenster:

        Code:
          --------------------------------------      --------------------------------------
         Objektnutzung                 | Anzahl      Webserverobjekte              | Anzahl
         ======================================      ======================================
         Schaltuhr                     |    140      link                          |      1
         Timer                         |     73      pbutton                       |     77
         Timebuffer                    |      0      pshifter                      |     80
         String Operationen            |    732      --------------------------------------
         TCP/IP/UDP Operationen        |      0                Summe (8 Webseiten) |    158
         Stringsuche                   |      0
         Flash                         |    350
         Fliesskommaoperationen        |      0
         if/else                       |   1489
         Gruppenaddressen              |   1458
         KNX Busoperationen            |     84
         Stringvariablen               |      0
         Verarbeitungsobjekte          |   8665
         --------------------------------------
                                 Summe |  12991
        da sollten wir dann die Timer sehen. Hätte die Suche ggf. vereinfacht...
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Zitat von enertegus Beitrag anzeigen
          Hätte die Suche ggf. vereinfacht...
          ... dazu müsste man aber erst mal wissen, was für Folgen die einzelnen Werte haben.

          Was du so schön als "umschiffen" beschreibst, ist ein normaler Programmierstil. Die meiste Zeit sind deine "Lösungen" genau so aufgebaut, erst Bedingung in temporäre Variablen packen und dann auswerten. Jetzt gilt es also, temporäre Variablen gegen Verschachtelungen zu tauschen?!

          An diesem Beispiel wird deutlich, dass der Compiler einfach Null Optimierung kennt und einen dann mit derartigen Trivialitäten reinlegt.

          Da mangelt es am Compiler, denn was der Programmierer hier wieder an Spezialwissen zeigen muss ist unvereinbar mit deinem Anspruch der einfachen Programmierung.
          BR
          Marc

          Kommentar


            #6
            Zitat von saft6luck Beitrag anzeigen
            Die meiste Zeit sind deine "Lösungen" genau so aufgebaut
            (...)
            Da mangelt es am Compiler
            Erstere Aussage ist pauschalisierend, was bei problemorientierten Lösungen immer schwierig ist. Konkretes Problem ist ja genannt worden (settime).
            Zweite Aussage ist schön getadelt.
            Vielleicht sollten wir das auch so handhaben, wie in einem parallelen Forum, dass man lieber beim Support Tickets aufmachen lässt, und davon abrät, im Forum zu posten. Dann kann man zwar nur den einen fragenden Kunden helfen, muss sicher aber sonst nicht jedesmal .... *

            *) in den Punkten sind leider nicht postbare Gedanken gesammelt - passend zu meinen "Lösungen".
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Eibparser Output

              Die jetzt laufende Version:

              Code:
              Objektnutzung                 | Anzahl      Webserverobjekte              | Anzahl
               ======================================      ======================================
               Schaltuhr                     |    137      button                        |     40
               Timer                         |    117      mchart                        |      1
               Timebuffer                    |      0      mpbutton                      |      2
               String Operationen            |   1626      pbutton                       |    126
               TCP/IP/UDP Operationen        |      5      peslider                      |      1
               Stringsuche                   |     84      pshifter                      |     20
               Flash                         |     81      pslider                       |      6
               Fliesskommaoperationen        |    134      webinput                      |      2
               if/else                       |   1328      weboutput                     |      8
               Gruppenaddressen              |    296      --------------------------------------
               KNX Busoperationen            |    398               Summe (21 Webseiten) |    206
               Stringvariablen               |    106
               Verarbeitungsobjekte          |   8575
               --------------------------------------
                                       Summe |  12887
              
               Genutzte Objekte EibPC  19.7 %.
              Prozessorlast zum Vorstehenden:
              Code:
              Firmwareversion des EibPCs: v3.012
              Seriennummer des EibPCs: 00000422
              Netzwerkeinstellungen: DHCP
                  Netzmaske:    255.255.255.0
                  Gateway:      192.168.0.1
                  Nameserver 1: 192.168.0.1
                  Nameserver 2: ?
                  Nameserver 3: ?
              Physikalische Adresse: 00-50-c2-79-31-6f
              Patches:
              3.015.ptc
              Boot image:
              Boot image fixes: 0
              Boot image updates: 3
              System boot time: Sun Oct 26 11:07:34 CET 2014
              Average CPU usage since booting: 28 %
              Maximum available firmware memory: 12728 kb
              VPN: The openvpn daemon is not running.
              Allowed VPN users:
              Drücken Sie eine beliebige Taste . . .
              Nun mit der "lokalen" Variablen "result@", die ja eigentlich ein globale Variable ist:

              Code:
              Objektnutzung                 | Anzahl      Webserverobjekte              | Anzahl
               ======================================      ======================================
               Schaltuhr                     |    137      button                        |     40
               Timer                         |    117      mchart                        |      1
               Timebuffer                    |      0      mpbutton                      |      2
               String Operationen            |   1626      pbutton                       |    126
               TCP/IP/UDP Operationen        |      5      peslider                      |      1
               Stringsuche                   |     84      pshifter                      |     20
               Flash                         |     81      pslider                       |      6
               Fliesskommaoperationen        |    134      webinput                      |      2
               if/else                       |   1328      weboutput                     |      8
               Gruppenaddressen              |    296      --------------------------------------
               KNX Busoperationen            |    398               Summe (21 Webseiten) |    206
               Stringvariablen               |    331
               Verarbeitungsobjekte          |   8575
               --------------------------------------
                                       Summe |  13112
              
               Genutzte Objekte EibPC  20.1 %.
              Ich spiel's aber nicht mehr auf den EibPC, denn nconf findet ihn ja dann eh nicht mehr...

              Unterschied: 225 Stringvariable, allerdings kommt "nur" etwa 70 x darin ein settime() vor - aber das scheint gereicht zu haben, den armen EibPC aus der Puste zu bringen....

              Ich schätze nicht, dass man aus dem Parser Output in dieser Form recht viel Hinweise hätte ziehen können.

              Kommentar


                #8
                Zitat von saft6luck Beitrag anzeigen
                ... dazu müsste man aber erst mal wissen, was für Folgen die einzelnen Werte haben.

                Was du so schön als "umschiffen" beschreibst, ist ein normaler Programmierstil. ....
                Einspruch, Euer Ehren!

                Natürlich ist das Gerät sehr speziell zu programmieren und ich hab' mich hier mal ordentlich ausgetrickst - ohne das Validierungskonzept umschiffen zu wollen.

                Aber ich glaube, wir sollten hier auch sehen, was wir am EibPC haben:
                Unglaubliche Flexibilität am KNX und das gleich mit Visu - ständige Weiterentwicklung am Puls der Kunden (natürlich wird man dabei gewollt oder ungewollt zum Betatester, aber wir treiben ja Enertex auch ordentlich vor uns her) - einen kaum bei anderen Herstellern bekannten Weltklassesupport.

                Ich habe am Samstag mit Michael einmal telefoniert, als er mir in meiner Verzweiflung bei der Fehlersuche anbot, ihn anrufen zu können - in der Servicewüste Deutschland ein leuchtender Komet!

                Natürlich hakt es im Detail auch mal und ich finde auch, dass die Programmiersprache vielleicht ein wenig mehr an den "Standard" anderer Hochsprachen angepasst werden sollte (Subroutinenaufruf z.B.). Dazu kommt, dass das EibStudio irgendwann einmal zu einer wirklichen Projekterwaltung werden sollte - im Vergleich zu sonstigen IDEs ist es natürlich schon ein wenig angestaubt. Aber es tut was es soll (und trainiert fleißig meinen rechten Zeigefinger mit dem Scrollrad...)

                Ein Forum wie dieses ist der Sammelplatz aller kleinen und großen Probleme. Niemand schreibt hier, welch tolle Ergebnisse man mit dem EibPC erzielen kann. Für Leute, die erst auf der Suche nach einem EibPC oder ähnlichen Gerät sind, könnte der Eindruck entstehen, dass der EibPC eigentlich haufenweise Probleme schafft. Ich finde es deshalb schon mutig, von Enertex, ein so offenes Forum zu unterstützen - die von Michael genannte Ticket-Alternative macht sicher keinem hier Spaß.

                Aber ich denke, Enertex muss auch haushalten mit seinen Ressourcen, sonst wird der EibPC unerschwinglich - und ich möchte ihn nicht mehr missen! Im Gegenteil - bis Weihnachten kommt wohl noch ein Zweitgerät ins Haus (als Steuergerät für die Heizung und als Reserve für wichtige Grundfunktionen im Haus, falls ich wieder mal was verbocke)...

                Herzliche Grüße
                Klaus

                Kommentar


                  #9
                  Hi,

                  ich muß nun auch mal, nach 1 Jahr Anwendung des eibPCs, meinen Senf dazu geben...:-)
                  Es hat mich ebenfalls ziemlich Nerven und Zeit gekostet "den eibPC zu verstehen", wenn man C oder Java kennt.

                  Aber wie schon geschrieben, das Preis-/Leistungsverhältnis ist top, hutschienentauglich und der Support ist ebenfalls bestens.

                  Ich möchte ihn auch nicht mehr missen, und hoffe dass Enertex genauso weitermacht!

                  Grüße Alex

                  Kommentar


                    #10
                    mir ist es ähnlich ergangen.
                    Am Anfang ist es nicht so trivial die Logik des EibPC zu verstehen da irgendwie eigenwillig. Aber das sehe ich heute nicht mehr so sehr als Problem.
                    Man muss sich in jede Programmiersprache einarbeiten.

                    Was Enertex allerdings machen sollte ist am Editor anzusetzen.
                    Eines der wichtigsten Dinge ist, denke ich, das der Editor endlich mit mehreren geöffneten Dateien umgehen kann.
                    Denn es nervt immer nur eine Datei offen haben zu können. Und ich denke die wenigsten werden ihr Projekt in nur einer Datei haben.
                    Ansonsten bin ich mit dem EibPC ebenfalls sehr zufrieden.

                    PS: Die Compiler Auflistung in den Bildern oben ... wird die erst mit V3 so gemacht. Ist mir noch nie aufgefallen. Habe V2.

                    robert

                    Kommentar


                      #11
                      Zitat von robert1210 Beitrag anzeigen
                      Was Enertex allerdings machen sollte ist am Editor anzusetzen.
                      100% ACK!
                      ist ja bald Weihnachten, also:
                      1. Tabs
                      2. automatische Ein-/Ausblenden von Sektion bei Doppelklick auf die Überschrift
                      3. automatisches Öffnen von Makros bei Doppelklick auf den Namen
                      4. automatisches Ein-/Ausblenden von IF .. THEN .. ELSE etc.
                      5. automatisch angezeigte Schlüsselwort-Vorschläge beim eintippen von Befehlen
                      6. automatisch angezeigte Quick-Tipps aller möglichen Parameter bei Maus-Over über einem Befehl
                      7. 1 bis 6 dann am besten auch noch konfigurierbar :-)
                      ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                      Kommentar


                        #12
                        Zitat von robert1210 Beitrag anzeigen
                        Was Enertex allerdings machen sollte ist am Editor anzusetzen.
                        stimmt zu 100%. Wir haben das schon gefühlt ewig auf dem Plan. Allerdings sind die Entwicklungsresourcen an Ende v.a. den Arbeiten bzw. Erstellung des Visuassitenten verplant worden. Ist aber definitiv nach wie vor auf dem Radar.
                        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                        Enertex Produkte kaufen

                        Kommentar


                          #13
                          ahh.. dann haut den Visuassi raus.. die Leute sollen tippen..
                          dann gehen auch die Charts
                          Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                          Kommentar


                            #14
                            also ich nehm den Assi auch nicht, wenn's den von Anfang an gegeben hätte, wäre das aber glaube ich zum Einstieg schon eine große Erleichterung gewesen. Außerdem erschließt er aus meiner Sicht schlicht zusätzliche Käuferschichten!
                            ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                            Kommentar


                              #15
                              War auch nicht ganz ernst gemeint, mein Statement... seh das
                              wie du...
                              Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                              Kommentar

                              Lädt...
                              X