Deutsch
Forum

Profan 5.0 nach Profan 8.0 :" @substr$ " ist zu la

 

Konrad
Flachs
Hallo,

ich habe ein Programm für ein Navigationssystem geschrieben, das mitunter verschiedene Formate konvertieren kann. Dabei ist mir aufgefallen, das beim einlesen einer csv-Datei (Strings durch semicolon getrennt) die Ladezeit wesentlich länger geworden ist. Der Befehl @substr$ benötigt jetzt mit Profan 8.0 etwa doppelt so lange wie mit Profan 5.0.

Ist das ein Bug von Profan 8.0? ...oder gibt es einen Trick dabei?

Gruss
Konrad
 
30.06.2004  
 



Nun, XProfan arbeitet im Gegensatz zu Prf5 mit Large-Strings, also Strings die nicht nur 256Chars, sonder sogar 32kB Chars an Länge haben können. Diese Umstellung im String-Wesen kann leider solch Auswirkungen mitsich bringen.

Außerdem müsste sich wohl Roland dazu ein wenig äußern.

Ich habe das mal kurz getestet, und muß zugeben substr ist in xprofan leider 5-Mal langsamer.

Folgenden Code habe ich dafür gepinselt:
KompilierenMarkierenSeparieren
print
declare t&,z&,s$,ss$
let t&=&gettickcount
let z&=0
let s$="SO KANNS WEITER| GEHGEN ODER OMIT | DLKFJS LKDFJ SO KANNS NICHT WEITER| GEHGEN ODER OMIT | DLKFJS LKDFJ SO KANNS WEITER| GEHGEN ODER OMIT | DLKFJS LKDFJ SO KANNS WEITER| GEHGEN ODER OMIT | DLKFJS LKDFJ "

while 1

    if gt(&gettickcount,t&)

        let t&=add(t&,1000)
        locate 1,1
        print z&
        let z&=0

    endif

    let z&=add(Z&,1)
    let ss$=substr$(s$,add(mod(z&,10),1),"|")

wend

end

@Frank, wollen wir den substr auf asm-basis beschläunigen? XPSE könnte aus substr ein _asm_substr machen, eine Procedure namens _asm_substr anlegen gefüllt mit einem ASM-Piece von Dir.

@Konrad, wenn Du möchtest schnuddle ich Dir schnell ne kleine Mini-DLL zusammen, die das CSV-Parsen für Dich erledigt. Wäre natürlich um ein Vielfaches zügiger. Müsstest mir nur den Profan-Code geben, der zu übersetzen ist. Den Rest erledige ich schon. Eine mini-beispiel-cvs genau zu diesem Thema wäre zum Testen nötig. Vielleicht ein kleiner Auszug aus der Originalen.

Bis denne, iF
 
30.06.2004  
 




Frank
Abbing
Hi,

also ich finde nicht, das die Funktion sooo langsam arbeitet, das man sie sofort ersetzen müßte.
Konrad, was für Strings verarbeitest du denn ?
Ein Beipspiel ?
 
01.07.2004  
 




Konrad
Flachs
Hallo If und Frank,

danke für die schnelle Antwort.

Ich habe festgestellt, das nicht nur substr$ sondern auch mid$ langsamer geworden ist.

Zum Vergleich das einlesen von 20000 csv-Zeilen:

Profan 5.0: ca.27sek.
Profan 8.0: ca.82sek.
Profan 8.0 ohne if und mid$ : 47sek.

Im Programm Teile ich jede Zeile mit z.B. Let rtecomment$ = @substr$(lineinp$,12,;) .
Dann werden die Teile gefiltert mit z.B. Let rtecomment$ = @mid$(rtecomment$,1,12) .... oder einer if-Abfrage.

Die Vergrösserung der maximalen Stinglänge ( von Vers.5.0 zu 8.0) scheint die Verarbeitungszeit von einigen Kommandos zu verlängern.

Ideal wäre natürlich eine Einschränkbarkeit der Stringlänge und einem dadurch resultierenden Zeitgewinn.

Gruss
Konrad
 
01.07.2004  
 



Wie gesagt, oder nen mini-Dll, müsstest nur sagen was die machen soll. Z.b. mir dein Profan-Source geben der langsam läuft. Frei geschätzt würde die DLL nicht 27, sonder 3 Sekunden für das Selbe brauchen.

Bis denne, iF
 
01.07.2004  
 




Frank
Abbing
Hi,

die Listview.dll z.B. benutzt CSV-Dateien und bietet einige Funktionen dafür an.
Ich würde CSV-Dateien auch immer mit Bereichen bearbeiten, nicht mit den langsamen Strings
Wenn du etwas Assembler lernen möchtest, kannst du dir mit dem XPIA selber Funktionen schreiben. Solche Maschinenfunktionen würden nicht 27 oder 3 Sekunden benötigen, sondern nur wenige Millisekunden.
 
01.07.2004  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Nur der Vollständigkeit halber:
CSV-Dateien kann man auch ganz gut per ODBC/SQL zu Leibe rücken. Obs schneller ist als die manuelle Methode oder sogar eine ASM-Routine, glaube ich allerdings nicht.
Dafür hat man Sortier- u. Suchmöglichkeiten und u.U. direkten Zugriff auf einzelne Zeilen/Spalten (je nach Dateiaufbau).

SeeYou
Pascal
 
01.07.2004  
 




Jens
Hallo Frank,

selbstverständlich hast Du Dich mit den Geschwindigkeitsangaben nicht vertan, jedenfalls gehe ich davon aus. Überrascht bin ich allerdings total.

Gibt es (selbstverständlich problemabhängige) Faktoren, wie schnell z.B. Profan compiliert im Vergleich zu Profan in c++ übersetzt, zu c++ pur bzw. zu Assembler-Code ist?

Viele Grüße

Jens
 
01.07.2004  
 



Nun, in manchen Angelegenheiten hatte ich einen Faktor von *65000 ermittelt, in anderen z.B. nur *10000. Damit gemeint ist der Unterschied eines (reinen) CPPs (nicht prf2cpp!) im Ggs. zu einer PrfExe. Das sind natürlich alles ca-Angaben. Im Grunde sind die Compilate von hochsprachen (wie z.B. cpp) nicht langsamer, als ASM-Code, da ja die Compiler (unter Berüchsichtigung vieler anderer Faktoren einstellbar mit Compilerschaltern) auch in ASM Compilieren. Es ist aber tatsächlich so, daß wenn man direkt in ASM komponiert man einige unwichtige-Operationen weglassen kann. Auf gut deutsch, wenn ein CPP-Prog in einer Sekunde 1mio mal addiert, würde ein reines asm das vielleicht 10-30% schneller schaffen. Das ist aber auch nur dann so, wenn man als CPPer nicht auf die richtigen Compilierschalter im Source achtet. Da bleibt es dem Programmierer selbst überlassen, kosten und nutzen abzuschätzen, wobei C++ natürlich mit einer leckeren Syntax und wirklich einfachen Befehlsmöglichkeiten lockt. Wenn man aber z.B. nur einen Register 1Mio male addieren muß, dann ist wohl natürlich ASM schneller. So könnte man behaupten, das desto einfacher die Aufgabe, desto mehr lohnt ASM.

Bis denne, iF
 
01.07.2004  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.516 Betrachtungen

Unbenanntvor 0 min.

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie