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

Antwort per Email an