String.join

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    Ist es schneller mit String.join alle Elemente eines Arrays zu verknüpfen oder mit einer For Schleife einer neuen Variable jedes Element des Arrays zu übertragen?
    Also wenn man jetzt z.B. ein Array mit 5000 Einträgen hat, dann alle diese Einträge verknüpft in eine Textdatei schreiben möchte - ist dann die methode mit string.join schneller oder mit der for schleife?
    So bringt dieser Thread keinem etwas, der ihn per Google findet. Die Frage dürfte nicht sein, welche Methode schneller ist, sondern eigentlich was du falsch gemacht hast (15 Minuten!). Auf keine der beiden gibt es hier eine Antwort?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    100000 Zeichen, in einer Schleife, die jeweils ein Zeichen einträgt, in eine Textdatei zu schreiben dauert halt solange..
    Was soll ich den da falsch gemacht haben? Ausser das ich halt jedes Element einzelnd über eine Schleife reingeschrieben habe.
    Habs jetzt aber geändert und mit String.join gehts 100x schneller.
    Hier bietet sich meiner Meinung nach gar nicht erst die Option zwischen "jedes Element einzelnd" und String.Join, sondern eher String.Join und nem StringBuilder. Damit könnte man dem Thread jetzt noch zu einer gewissen Daseinsberechtigung verhelfen, wenn man die Schnelligkeit beider vergleicht.

    Außerdem sind Fehler beim Dateizugriff zu vermuten.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ich poste mal den Code:

    VB.NET-Quellcode

    1. Private Sub erstellen(ByVal text As String)
    2. DerzeitigerName = TextBox2.Text
    3. Dim Passwort(text.Length - 1) As String
    4. For Buchstabe = 0 To text.Length - 1
    5. Passwort(Buchstabe) = text(Buchstabe)
    6. For Zufal = 0 To ZwschnZufall - 1
    7. Passwort(Buchstabe) &= Charstring.Chars(ZufallBuchstabe)
    8. If Aktiv = False Then
    9. Entschlüsselungszufall.Add(ZwschnZufall)
    10. Aktiv = Not Aktiv
    11. End If
    12. ZwschnZufall = ZwischenAbstand.Next(9, 30)
    13. ZufallBuchstabe = Zufallsbuchstabe.Next(0, Charstring.Length)
    14. Next
    15. Aktiv = Not Aktiv
    16. Next
    17. For Item = Entschlüsselungszufall.Count - 1 To 0 Step -1
    18. Konventschl.Add(ChrW(Entschlüsselungszufall.Item(Item) * 4))
    19. Next
    20. Me.Invoke(Sub() ProgressBar1.Maximum = Passwort.Length + Konventschl.Count)
    21. Increase(Passwort, 4)
    22. System.IO.File.WriteAllText("C:\Users" & Username & "" & DerzeitigerPfad & "" & DerzeitigerName & ".txt", String.Join(Nothing, Passwort)) 'Hier war vorher eine Schleife mit der jedes einzelne Element (das in der obrigen Prozedur eingetragen wird) in die Datei reingeschrieben wurde.
    23. Increase(Passwort, 4)
    24. If Checkbox1.Checked Then
    25. edit(My.Computer.FileSystem.SpecialDirectories.Temp & "" & DerzeitigerName & "Key.txt")
    26. ElseIf Checkbox2.Checked Then
    27. edit("C:\Users" & Username & "" & DerzeitigerPfad & "" & DerzeitigerName & "Key.txt")
    28. Else
    29. edit(My.Computer.FileSystem.SpecialDirectories.Temp & "" & DerzeitigerName & "Key.txt")
    30. edit("C:\Users" & Username & "" & DerzeitigerPfad & "" & DerzeitigerName & "Key.txt")
    31. End If
    32. Increase(Passwort, 2)
    33. Konventschl.RemoveRange(0, Konventschl.Count)
    34. Entschlüsselungszufall.RemoveRange(0, Entschlüsselungszufall.Count)
    35. Me.Invoke(DirectCast(AddressOf Activates, Action(Of Boolean)), True)
    36. MessageBox.Show("Datei wurde verschlüsselt!")
    37. Label3.ForeColor = Color.Green
    38. End Sub
    39. Private Sub Increase(ByVal PassLength() As String, ByVal value As Byte)
    40. Me.Invoke(Sub() ProgressBar1.Increment(Convert.ToInt32((PassLength.Length + Konventschl.Count) / value)))
    41. End Sub
    42. Private Sub edit(ByVal path As String)
    43. System.IO.File.AppendAllText(path, String.Join(vbNewLine, Konventschl))
    44. End Sub
    Bei der Gelgenheit auch gleich ChrW streichen: [VB 2010] Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Du hast die Erlaubnis dem Link zu folgen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ahh danke Artentus, hatte mir den Link auch gerade angeschaut, hab noch asc drinne, dass muss dann zu Convert.toint16?
    Ahso ne das ja unter keine bösen Funktionen :P hab mich verschaut.

    Was wäre denn anders wenn ich mit einem Streamwriter arbeiten würde? Ausserdem müsste ich dann beim auslesen auch einen Streamreader verwenden?