gpt4 book ai didi

c++ - 内存泄漏、大量位图图像 C++ CLI

转载 作者:行者123 更新时间:2023-11-30 16:33:41 24 4
gpt4 key购买 nike

我收到内存不足错误。我在图片处理应用程序中有一个表单。

以下是 void 例程中的相关代码部分:

Image^ CurrentImage;
Image^ ProcessedImage;
for(int i=0; i<NumSourceFiles; i++) {
CurrentImage = Image::FromFile(File[i]);
ProcessedImage = ProcessImage(CurrentImage, ShrinkToWidth, ShrinkToHeight, Rectangle(LeftOrigin,TopOrigin,CropWidth,CropHeight));
NumFiles++; //increment to get next number to save
NextFileName = folderName_specific+"\\"+SelectedCondition+"_"+Convert::ToString(NumFiles)+".jpg";
ProcessedImage->Save(NextFileName, ImageFormat::Jpeg);
delete CurrentImage;
delete ProcessedImage;
}

现在这是 ProcessImage 例程:

private: Image^ ProcessImage(Image^ img, int width, int height, Rectangle cropArea)  //shrink and crop
{
Bitmap^ bmpImage = gcnew Bitmap(img);
bmpImage = bmpImage->Clone(cropArea, bmpImage->PixelFormat);
Bitmap^ bmpImage1 = gcnew Bitmap(bmpImage, width, height);
delete bmpImage;
return bmpImage1;
}

如果我删除所有删除语句,那么它将在内存耗尽之前处理大约 200 个图像。如果我删除 void 例程中的两个删除语句,它将处理大约 300 个图像。如果我将它们全部保留在其中,它将在内存不足故障之前处理大约 500 个图像。它总是在 ProcessImage 例程的第一个语句处失败。

我尝试将 bmpImage1 设为全局变量并在 void 例程中将其删除,但这没有帮助。知道我在哪里建立内存吗?

<小时/>

2018 年 4 月 12 日更新:我将其简化如下(将其全部放在 for/next 循环中),并且在保存 550 张左右的图片后它仍然会耗尽内存。难住了……真的需要解决这个问题……小帮忙吗? (非常高兴在上面加糖!)

for(int i=0; i<NumSourceFiles; i++) {
Image^ CurrentImage = Image::FromFile(File[i]);
NumFiles++; //increment to get next number to save
NextFileName = folderName_specific+"\\"+SelectedCondition+"_"+Convert::ToString(NumFiles)+".jpg";
Bitmap^ bmpImage = gcnew Bitmap(CurrentImage);
bmpImage = bmpImage->Clone(Rectangle(LeftOrigin,TopOrigin,CropWidth,CropHeight), bmpImage->PixelFormat);
Image^ ProcessedImage = gcnew Bitmap(bmpImage, ShrinkToWidth, ShrinkToHeight);
ProcessedImage->Save(NextFileName, ImageFormat::Jpeg);
delete bmpImage;
delete ProcessedImage;
delete CurrentImage;
}

最佳答案

通过在三个删除语句后添加这两个语句解决了这个问题:

GC::收集();GC::WaitForPendingFinalizers();

您必须按此顺序使用这两个语句。内存泄漏已被克服。

关于c++ - 内存泄漏、大量位图图像 C++ CLI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com