C# 将图像转换为内存不足错误

C# 将图像转换为内存不足错误,c#,C#,我的图像转换程序有问题。我可以转换39幅图像,然后出现以下错误: 引发异常:System.Drawing.dll中的“System.OutOfMemoryException” 我不知道我的代码有什么问题 错误: string[] originalImage = Directory.GetFiles(textBox1.Text); foreach (var filename in originalImage) {

我的图像转换程序有问题。我可以转换39幅图像,然后出现以下错误:

引发异常:System.Drawing.dll中的“System.OutOfMemoryException”

我不知道我的代码有什么问题

错误:

string[] originalImage = Directory.GetFiles(textBox1.Text);
                foreach (var filename in originalImage)
                {

                    if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG")
                    {
                        Bitmap bitmap = new Bitmap(filename); //error coming here
                        //DefaultCompressionJpeg(bitmap);
                        string fn = Path.GetFileNameWithoutExtension(filename);

                        VariousQuality(bitmap, fn, fileExtension, fileOriginalDate);

                    }
                }

当您使用完实现IDisposable的每个对象时,您应该处理该对象。以下是程序中的一些一次性对象

Filestream ms,
Bitmap original,
EncoderParameter encoderParameter 
当没有足够的内存继续执行程序时,将引发OutOfMemoryException。处理上述物品可以解决您的问题

更新: 尝试以下代码

       if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG")
        {
            using (Bitmap bitmap = new Bitmap(filename)) // added using statement.
            {
                //DefaultCompressionJpeg(bitmap);
                string fn = Path.GetFileNameWithoutExtension(filename);

                //saadame lisaks ka extensioni, et saaksime lihtsamini faili ümber nimetada
                VariousQuality(bitmap, fn, fileExtension, fileOriginalDate);
            }

        }

当您使用完实现IDisposable的每个对象时,您应该处理该对象。以下是程序中的一些一次性对象

Filestream ms,
Bitmap original,
EncoderParameter encoderParameter 
当没有足够的内存继续执行程序时,将引发OutOfMemoryException。处理上述物品可以解决您的问题

更新: 尝试以下代码

       if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG")
        {
            using (Bitmap bitmap = new Bitmap(filename)) // added using statement.
            {
                //DefaultCompressionJpeg(bitmap);
                string fn = Path.GetFileNameWithoutExtension(filename);

                //saadame lisaks ka extensioni, et saaksime lihtsamini faili ümber nimetada
                VariousQuality(bitmap, fn, fileExtension, fileOriginalDate);
            }

        }

如果要在第一个循环中中断,为什么还要使用
for
循环?
OutOfMemoryException
可能来自
FileStream
,它可能无法在每个转换过程中正确处理,因此在创建新实例时,现有实例仍在内存中可用,并耗尽了内存空间
FileStream
上使用
语句可以解决这个问题。如果在第一个循环中中断,为什么还要使用
for
循环?
OutOfMemoryException
可能来自
FileStream
,在每个转换过程中可能都没有正确处理,因此,在创建新实例时,现有实例在内存中仍然可用,并耗尽了内存空间
使用
FileStream
上的
语句可以解决此问题。更新了我的答案。我包括了一个using语句,它将在位图使用后处理位图。除此之外,GDI+还有一些已知问题,当它们实际上不存在时,将显示为OutOfMemoryException,例如:更新了我的答案。我包括一个using语句,它将在位图使用后处理位图。除此之外,GDI+还有一些已知问题,当它们实际上不存在时,将显示为OutOfMemoryException,例如: