-
Forum: Software-Projekte der Mitglieder
by stoxx,
2. Mär 2008
die gab es nur, weil Du wahrscheinlich mit einem Resourcestring getestet hast :-)
das geht nicht so wirklich ....
nur normale Strings ...
also NICHT:
var s : String;
begin
s := 'ghh,dddd';
Exploder.explode(s);
-
Forum: Software-Projekte der Mitglieder
by stoxx,
2. Mär 2008
ja, da war ein Bug im Array vergrößern drin, die version die Du hochgeladen hast, war nicht die letzte und schnellste :-)
Ist auch noch ein kleiner Bug drin ( in der letzten) .. muss ich aber nochmal drüber nachdenken.
ich ersetzte ja die Null nach einem String mit dem FSeperator .. die müsste man wieder herstellen.
Delphi selber geht in seinen TSTrings Routinen auch davon aus, dass die Null...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
1. Mär 2008
isch hab noch bissi dran rumgeschraubt *g*
zumindest für einen Seperator mit der Zeichenlänge eins :-)
bist Du noch schneller mit asm + strings, als mit einer optimierten Pointerlösung ? .. würde mich jetzt mal interessieren
Hier der Vergleich auf einem "alten" 3200+ AMD als Referenz ...
-------------------------------------------------
Compiliertes Eingangsbeispiel von alzaimar...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
25. Feb 2008
das ist MIT auslesen, ohne auslesen und nur explode kommt man auf 215 MB/s :mrgreen:
Und wenn man nur einen string braucht vielleicht nur auf 210 MB/s? .. hihi .. keine Ahung.
kann man testen ...
ohne auslesen, nur explode:
Using TStringExploder in TStringList
100 chars per line; Itemlänge: 10; 1000000 lines in 453 tics, 2207506 lines per sec, 215,6 mb/s (del =...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
25. Feb 2008
ups, dopptelt (gelöscht)
-
Forum: Software-Projekte der Mitglieder
by stoxx,
25. Feb 2008
doch, doch, die werden schon ausgelesen, nämlich einem String zugewiesen.
Soviel bräuchte man, wenn man daraus irgendwas machen will (Zahlen umwandeln oder sonstwas)
Das wäre ein einziger Zugriff auf den Original String, da ich diesen mir auch nicht als Member Variable speicher.
(Copy on Write) sobald man da irgendwas verändert.
für ein oder zwei Zeichen hätte ich noch eine Idee für Dich,...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
25. Feb 2008
hmmm .. weiß jemand was der da tut??
Könnte man die Operationen auch so gestalten, dass es auch mit einem beliebigen Zeichen funktioniert?
Oder ist diese Arithmetik nur für Null einsetzbar?
function StrLen_JOH_PAS_3_a(const Str: PChar): Cardinal;
var
P, PStr: PChar;
I, J: Integer;
-
Forum: Software-Projekte der Mitglieder
by stoxx,
25. Feb 2008
vielleicht bringt ja die JOH Pos auf PChar basierend noch mehr Performance ;-)
http://fastcode.sourceforge.net/FastcodeFileDownloads/StrLenBV132.zip
und hier sieht man mal, dass die Suche nach einem Zeichen (Null) von JOH in Pascal wesentlich schneller sein können, als eine ASM Routine .... :-)
http://fastcode.sourceforge.net/FastcodeFileDownloads/StrLenBenchmark132.xls
-
Forum: Software-Projekte der Mitglieder
by stoxx,
25. Feb 2008
also mit der Lösung im Anhang bin ich auf 93,1 MB pro Sekunden.
Im Vergleich zur ersten Lösung eine Steigerung um 300 Prozent.
Using TStringExploder in TStringList
100 chars per line; Itemlänge: 10; 1000000 lines in 1047 tics, 955110 lines per sec, 93,3 mb/s (del = ";")
10000 chars per line; Itemlänge: 100; 50000 lines in 1844 tics, 27115 lines per sec,...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
25. Feb 2008
Bei einem einstelligen Trennzeichen (z.B. ';') ergeben sich Performancesteigerungen (MB/s) von 10-150% (die 150% natürlich bei extrem langen Strings),
100 chars per line: 1000000 lines in 2907 tics, 343997 lines per sec, 33,6 mb/s (del = ";")
das kann man mal als Referenz für den meinen Rechner nehmen.
Es stimmt, mit Fastcode erreicht man steigerungen in dem Bereich um ungefähr 100...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
24. Feb 2008
Das habe ich nun ausgiebig getestet und kann man soooo pauschal nicht sagen.
Deine ASM FastPosEx ist in meinem Anwendungsfall überhaupt nicht zu gebrauchen und braucht mehr als doppelt so lange, wie Deine effiziente Pointerlösung. (allerdings ist eine Modifikation notwendig)
Es kommt immer auf den Kontext der Anwendung an, und man sollte es einfach mal austesten.
Im groben kann man aber...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
24. Feb 2008
In einer QSearch-Version war der Fehlerteufel drin. Ich hoffe, das das bei der hier nicht der Fall ist.
die korrigierte Variante von QPosEX in Pascal und nicht ASM würde mich äußerst stark interessieren :-)
Wäre das möglich? :-) .. Vielen Dank !
(Function QPosEx(SearchFor, SearchIn: String; Start: integer): integer;)
-
Forum: Software-Projekte der Mitglieder
by stoxx,
23. Feb 2008
boah ... sowas aggressives .. wer ist Dir denn über die Schuhe gelaufen.
Nein, die Funktion ist natürlich nicht falsch, die macht genau das, was sie tun soll. Einen String trennen, der getrennt ist, durch ein oder mehrere Zeichen! Und wenn alles mit "bla" getrennt ist, tut sie das auch!
Anschauen und ausprobieren würde vielleicht helfen, anstatt rumzumeckern. In der Funktion gibt es überhaupt...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
23. Feb 2008
Aber vllt kannst du das verkniffene Murren von Bernhard nun nachvollziehen?
Im Moment noch nicht. Wie ich ihn verstanden habe, sind doch die störenden Zeichen nur Hochkommas am Anfang und Ende eines Strings.
Man würde also einfach mit if prüfen, ob das der Fall ist und ändert die SetString Funktion noch ein bisschen, dann eignet sich die explode Funktion auch zum einlesen solcher CSV Files....
-
Forum: Software-Projekte der Mitglieder
by stoxx,
23. Feb 2008
tss .. immer diese, "ich bin wichtiger Mentalität"
man, man ... nein, unsere CSV Files sind sogar größer als Deine. (mehrere 100 MB und ingsesammt soviele dass mehrere Gigabyte verarbeitet werden müssen)
Und der CSV Reader, den wir nun gebastelt haben, ist sehr schick uns wahnsinnig schnell.
Es steht Dir doch frei, die Funktion so zu verändern, wie Du möchtest. Wo liegt Dein Problem?
-
Forum: Software-Projekte der Mitglieder
by stoxx,
23. Feb 2008
hättest Du vielleicht die korriegierte Variante von QSearch bitte noch in Pascal Roh-Text? Ich hab immer gern beide Variante implementiert, falls mal irgendwas nicht funktioniert und der Code auf 128 Bit Windows nicht mehr laufen sollte :-)
Das wäre ganz nett von Dir!!
hast Du jetzt FastPos in die Explodefunktion schon eingebaut?
Vielleicht magst die ja noch in den ersten Post...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
23. Feb 2008
na die müsste man halt getrennt rauslöschen, wir haben solche CSV Files nicht :-) .. oder damit keine so häufigen Stringkopien gemacht werden, das Setstring so verändern, dass hochkommas nicht mit reingesetzt werden .. man müsste die Explodefunktion nur kurz umschreiben ...
-
Forum: Software-Projekte der Mitglieder
by stoxx,
23. Feb 2008
30%- 75% Prozent Performancegewinn gewinnst Du bei einem Seperator der Länge 1, wenn Du die lokale Funktion in der Explode Procedure weglässt.
(ein Zeichen als Seperator braucht man ja häufig für CSV Files)
Schon wenn die _AddString Procedure nur drin steht, und gar nicht aufgerufen wird, bricht die Performance durch den Aufruf-Stack massiv ein.
TStrings ist auch ein sehr schwieriges Nadelöhr....