Ich versuche, eine Textdatei zu schreiben. Hier ist meine Haupt, leicht beschnitten für Klarheit:StringBuilder in .net nicht ganze Datei schreiben
Private Sub WriteProperty(FilePath As String)
Try
SB = New StringBuilder
WriteConfig()
'a bunch of methods similar to WriteConfig here...
Dim File As New System.IO.StreamWriter(FilePath)
File.WriteLine(SB.ToString())
Catch ex As Exception
Dim X As Integer = 5 'cheesy way to add a breakpoint
End Try
End Sub
Und hier ist eine von etwa einem Dutzend U-Boote, die Text in der Datei hinzufügen:
Private Sub WriteConfig()
Dim TempSB As New StringBuilder
TempSB.AppendLine("[CONFIG]")
TempSB.AppendLine("[END_CONFIG]")
TempSB.AppendLine("")
SB.Append(TempSB)
End Sub
Es gibt etwa ein Dutzend Methoden, die Dinge wie diese hinzufügen , die meisten von ihnen hinzufügen etwa 2k Text anstelle der paar Zeilen in diesem Beispiel. Wenn ich SB im Debugger untersuche, ist das Gesamtergebnis etwas über 15k lang. Aber wenn ich die Datei öffne, ist es 12k, und das Ende fehlt - es schneidet in der Mitte einer der Saiten ab. Es gibt keine Ausnahme.
Ich weiß, SB hat Probleme mit vielen kleinen Anhängen, weshalb ich die TempSBs in den Subs verwendet habe, aber es hat genau das gleiche Problem, und wenn ich sie direkt SB hinzufügen, ist der einzige Unterschied der "Pause "tritt ein paar Zeichen früher auf.
Kann jemand einen Vorschlag bieten, was passiert sein könnte?
Stringbuilder ist nicht gebrochen. Das Vergessen der Using-Anweisung ist ein Standardfehler. –
Was sind die "Probleme" die 'StringBuilder' mit vielen kleinen' .Append's haben? – Fabio
@Fabio - Eine Anzahl von .Net streambezogenen Objekten verdoppeln ihre Speicherzuweisung, wenn Sie die aktuell zugewiesene Größe erreichen. Die Tabelle zum Halten dieser Blöcke ist klein. Wenn Sie Ihre Schreibvorgänge so organisieren, dass sie dieses Pufferlimit überschreiten, können Sie selbst bei sehr kleinen Größen "keinen Platz mehr haben". Ich habe Streams um 50k getötet. –