System Out Of Memory Exception

13/11/2008 - 19:06 von Ralf Sauerland | Report spam
Guten Abend,

kann hier grad ein merkwürdiges Verhalten beobachten. Ich beschreibe kurz
die Situation. Ich habe eine unsichtbare ListView und auf Klick auf einen
ToolStripButton lade ich insgesamt etwa 10 Bilder in 2 ImageListen und in
die ListView. Diese und eine weitere LV mache ich dann sichtbar. Die
Struktur:

Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles ToolStripButton1.Click
Call TSB1_Helper()

'ein paar weitere Zeilen Code
End Sub

Private Sub TSB1_Helper()
Call LoadB(ListView1)
ListView1.Visible = True
ListView2.Visible = True
ToolStripButton1.Enabled = False
ToolStripButton2.Enabled = True
End Sub

Private Sub LoadB(ByVal LV As ListView)
Dim File As System.IO.FileInfo
Dim Files As System.IO.FileInfo()
Dim Dir As New System.IO.DirectoryInfo(sMPathB)
Dim sFeld(0 To 3) As String
Dim i As Integer = 0
Dim myImage As System.Drawing.Image

Files = Dir.GetFiles
LV.Items.Clear()

For Each File In Files
myImage = Image.FromFile(File.FullName)
imglEditionenG.Images.Add(myImage)
imglEditionenK.Images.Add(myImage)
sFeld = File.Name.Split(CChar("."))
LV.Items.Add(sFeld(1), i)
LV.Items.Item(i).Tag = sFeld(2)
i = i + 1
Next
End Sub

Hinweis: Den Aufbau: ToolStripButton -> TSB1_Helper -> LoadB habe ich gwàhlt
weil an anderer Stelle die TSB1_Helper Prozedur direkt angesprungen wird
ohne den übrigen Code unter dem ToolStripButton.

Das funktioniert soweit auch pràchtig. Nur auf einem einzigen Testrechner
tritt bei Klick auf ToolStripButton1 der besagte System Out Of Memory Fehler
auf, auf allen anderen Rechnern nicht, wie kann das sein?

Dann dachte ich mir ich mach eine Using-Konstruktion um die Image-Variable
zwecks Speicher freigeben:

Using myImage As Drawing.Image = Image.FromFile(File.FullName)
imglEditionenG.Images.Add(myImage)
imglEditionenK.Images.Add(myImage)
End Using

Dann kommt der Memory Fehler nicht mehr, dafür eine Invalid Argument
Exception an folgender Stelle:

Private Sub TSB1_Helper()
Call LoadB(ListView1)
ListView1.Visible = True < Invalid Argument Exception
ListView2.Visible = True
ToolStripButton1.Enabled = False
ToolStripButton2.Enabled = True
End Sub

Schon ein wenig verzweifelt bin ich dann dazu übergegangen die beiden
ListViews als erstes sichtbar zu machen und LoadB aufzurufen. Dann kommt es
aber wieder irgendwo in diesem Code zum Out Of Memory Fehler.

Ich bin gerade ein wenig verwirrt und bitte euch um Unterstützung.

1. Wie kann das sein daß der Fehler (Out of Memory) auf einem System
auftritt und auf Anderen nicht?
2. Wieso verursacht die Using-Konstruktion in der aufrufenden Prozedur die
Invalid Argument Exception? (Auf allen getesteten Rechnern)
3. Was kann ich tun um diesen Fehlerbildern aus dem Weg zu gehn, damit der
Code so làuft wie er soll?

Vielen Dank und viele Grüße!
 

Lesen sie die antworten

#1 Karsten Sosna
14/11/2008 - 05:36 | Warnen spam
Files = Dir.GetFiles
LV.Items.Clear()

For Each File In Files
myImage = Image.FromFile(File.FullName)

Das funktioniert soweit auch pràchtig. Nur auf einem einzigen Testrechner
tritt bei Klick auf ToolStripButton1 der besagte System Out Of Memory
Fehler auf, auf allen anderen Rechnern nicht, wie kann das sein?



Hallo Ralf,
ich gehe mal davon auf, das dort eine "korrupte Datei" dabei ist, die nur
auf diesem Rechner vorhanden ist. Überprüfe mal die Dateinamen.

Dann dachte ich mir ich mach eine Using-Konstruktion um die Image-Variable
zwecks Speicher freigeben:

Dann kommt der Memory Fehler nicht mehr, dafür eine Invalid Argument
Exception an folgender Stelle:



Ein àhnliches Problem hatte ich letztens auch:
http://groups.google.com/group/micr...a7e379d012
siehe Stefans Antworten.
Gruß Scotty

Ähnliche fragen