This topic is 3809 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello everyone, if someone has ran into this and solved it please help... I think it may have to do with .net's Garbage Collector. Anyhow, here is the problem..I'm loading bitmaps to gather data on them and then I leave them for the GC to dispose of.. So I trimmed down my code to this simple test and i keep getting out of memory exceptions when I get to the 520th image. All this code does is load a bitmap from a file then disposes it and moves on the next one... any ideas?? PS: I call loadImageLibrary() from another function where it just iterates from 0-750, and calls loadImageLibrary(i).... of course it never makes it to 750, it errors out at 520.
private void loadImageLibrary(int imageNum)
{

fileProcessed.Refresh();

// see if the file exists
if (!(File.Exists((this.T_SourceImageTemplate.Text).Replace("*", imageNum.ToString()))))
{
MessageBox.Show("File: " + (this.T_SourceImageTemplate.Text).Replace("*", imageNum.ToString()) + "is missing");
checksComplete = false;
return;
}

//Image tempImage = (Bitmap)Image.FromFile((this.T_SourceImageTemplate.Text).Replace("*", imageNum.ToString()));
Bitmap currentImage = new Bitmap((Bitmap)Image.FromFile((this.T_SourceImageTemplate.Text).Replace("*", imageNum.ToString())),
new Size(imageLibWidth, imageLibHeight));
currentImage.Dispose();
}



##### Share on other sites
Try splitting the image resize into two steps so you can dispose of them separately.

Bitmap currentImage = (Bitmap) Bitmap.FromFile(this.T_SourceImageTemplate.Text.Replace("*", imageNum.ToString()));Bitmap resizeImage = new Bitmap(currentImage, new Size(imageLibWidth, imageLibHeight));resizeImage.Dispose();currentImage.Dispose();

##### Share on other sites
Quote:
 Original post by HeadkazeTry splitting the image resize into two steps so you can dispose of them separately.Bitmap currentImage = (Bitmap) Bitmap.FromFile(this.T_SourceImageTemplate.Text.Replace("*", imageNum.ToString()));Bitmap resizeImage = new Bitmap(currentImage, new Size(imageLibWidth, imageLibHeight));resizeImage.Dispose();currentImage.Dispose();

I tried that and unfortunately, I'm still getting the oom messages :(

##### Share on other sites
Hmmm.. maybe try

using (Bitmap currentImage = (Bitmap)Bitmap.FromFile(this.T_SourceImageTemplate.Text.Replace("*", imageNum.ToString()))){	using (Bitmap resizeImage = new Bitmap(currentImage, new Size(imageLibWidth, imageLibHeight)))	{		// Do stuff	}}

I believe this will force the GC to clean up straight away.

##### Share on other sites
I tried that too, but to no avail. I even tried delaying the loop and that didn't work either. It can't be memory, because im only loading a 1024x768 image, and then supposedly when I reuse the same variable it should merely fill out the existing memory, but somehow this is not happening...

##### Share on other sites
The out of memory error in GDI+ can mean many things, so it's hard to say.

Just as an experiment, instead of trying to load the 750 images try loading the first 300 3 times. This way you can see if image #520 is causing the problem. Also maybe try removing image 520 to see if it will make it past it. Maybe even try loading the same image 750 times.

##### Share on other sites
Quote:
 Original post by HeadkazeThe out of memory error in GDI+ can mean many things, so it's hard to say.Just as an experiment, instead of trying to load the 750 images try loading the first 300 3 times. This way you can see if image #520 is causing the problem. Also maybe try removing image 520 to see if it will make it past it. Maybe even try loading the same image 750 times.

Thank you sir! I feel like a complete idiot. It WAS one of the image files..lol.. in fact I did a batch renaming of all my files in a certain folder and didn't pay attention to the fact that I had some PDF's in there!

Thanks!!

##### Share on other sites
haha, this is cool. though i hate the gdi wrapper for these situations (i had similar ones..).

definitely sometimes hard to debug..