vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
System.OutofMemory.Exception 
Autor: Spassmann
Datum: 28.02.07 09:39

Hi Board,

ich hab ein kleines speicher problem in meiner anwendung.
Ich lese per StreamReader eine PostScript-Datei ein und dabei stürzt er mir ab.
Laut Taskmanager brauch meine App ca. 280 MB Speicher und die PostScript-Datei ist etwa 160 MB groß.

Mein Code sieht so aus:

    Public Sub Ersetzen(ByVal inputfilepath As String, ByVal inputfile As _
      String, ByVal outputfilepath As String, ByVal outputfile As String, ByVal _
      searchcriteria As String, ByVal replacement As String)
        Dim ifile As IO.StreamReader
        Dim ofile As IO.StreamWriter
        ifile = New IO.StreamReader(inputfilepath & inputfile)
        ofile = New IO.StreamWriter(outputfilepath & outputfile)
 
        Dim zeilen As String
 
        Try
            zeilen = ifile.ReadToEnd
            ifile.Close()
        Catch ex As Exception
            MsgBox(ex.Message, , "Einlesen zum Ersetzen")  <<-------- hier _
              steigt er aus
            Exit Sub
        End Try
        Try
            zeilen = zeilen.Replace(searchcriteria, replacement)
        Catch ex As Exception
            MsgBox(ex.Message, , "Ersetzen der Strings")
        End Try
        Try
            ofile.WriteLine(zeilen)
        Catch ex As Exception
            MsgBox(ex.Message, , "Schreiben der Ersetzten Datei")
        End Try
 
        ofile.Close()
    End Sub
Hat jemand eine Ahnung wie ich das anders schreiben kann/muss, damit das funktioniert. Ich hab 1GB Ram in meiner Kiste und die ist noch lang nicht ausgereizt, daher habe ich keinen Dunst wie ich das Prob umgehen kann.

Wär echt cool wenn jemand Rat wüsste.

Danke
Spassmann
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: System.OutofMemory.Exception 
Autor: ModeratorFZelle (Moderator)
Datum: 28.02.07 11:18

Tja, das wird wohl so nichts.

Du liesst den Text in einen String ein.
Dieser String ist ein Unicode string, also 2 byte pro char.
Dann Ersetzt Du etwas darin, jetzt wird ein neuer String erzeugt,
der Alte besteht aber weiter.

Du hast jetzt also 4 * 160MB + sonstiges im Speicher.


Du solltest also die Datei lieber Zeilenweise bearbeiten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: System.OutofMemory.Exception 
Autor: Spassmann
Datum: 28.02.07 15:09

Jo hab ich jetzt so gemacht und so funzt es.
Ich hab aber deine Rechnung leider nicht verstanden.

Wie kommst du auf 4x 160 MB?

Kannst du mir das nochmal erklären?

Gruß
Spassmann
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: System.OutofMemory.Exception 
Autor: ModeratorFZelle (Moderator)
Datum: 28.02.07 15:50

Jedes Zeichen (char ) deiner 160MB Datei entspricht 2 byte in Unicode.

Also 2 mal die Chars, mal 2 strings.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel