On 14.08.12 15:35, Thomas Tempelmann wrote:
Na, dann machste genau das, was ich vorschlug, und zwar in beiden
dimensions-loops. Also nicht den "temp" die ganze Zeit mit "+"
zusammenbauen, sondern in ein array sammeln, das du dann mit Join
zusammensetzt.
Moin!
Nu muss ich hierzu auch noch einen Kommentar abgeben.
Wenn das ganze Geraffel doch eh als Binärfile geschrieben wird frage ich
mich wieso überhaupt vorher in einen String gewandelt wird.
Ich habe mal einen kurzen Test gemacht und hier ist mein Ergebnis:
Array dimension is 1000 * 50
Item count is 50.000
Data setup started... Done. Time: 6,986 ms
-----
Save binary file... Done. Time: 17,892 ms
Save string file (join)... Done. Time: 227,069 ms
Save string file... Done. Time: 1.732,135 ms
und
Array dimension is 1000 * 100
Item count is 100.000
Data setup started... Done. Time: 11,077 ms
-----
Save binary file... Done. Time: 31,523 ms
Save string file (join)... Done. Time: 443,420 ms
Save string file... Done. Time: 8.732,773 ms
Zu meinem Test:
Die Daten wurde wie folgt initialisiert
dim foo(-1,-1) As double
redim foo(kMaxArrayX-1, kMaxArrayY-1)
for x as Integer = 0 to kMaxArrayX-1
for y as Integer = 0 to kMaxArrayY-1
foo(x, y) = x*y
next
Next
SaveString (ohne Join, also BÖSE):
dim s As string
for x as Integer = 0 to kMaxArrayX-1
for y as Integer = 0 to kMaxArrayY-1
s = s + str(foo(x, y)) + kDelimiter
next
Next
bs = BinaryStream.Create(f, true)
bs.Write s
bs.Close
bs = nil
SaveString (join):
dim s(-1) As string
for x as Integer = 0 to kMaxArrayX-1
for y as Integer = 0 to kMaxArrayY-1
s.Append str(foo(x, y))
next
Next
bs = BinaryStream.Create(f, true)
bs.Write join(s, kDelimiter)
bs.Close
bs = nil
und hier mein Favorit ohne String Umwandlung
bs = BinaryStream.Create(f, true)
for x as Integer = 0 to kMaxArrayX-1
for y as Integer = 0 to kMaxArrayY-1
bs.WriteDouble foo(x, y)
next
Next
bs.Close
bs = nil
Damit wären wir also noch einmal um den Faktor 10 schneller als String
mit join...
Gruß,
Tom