[英]How i can free my application memory in c#?
1) 如何释放内存或增加最大已用内存?
您是否收到 OutOfMemoryException 并且您的内存没有填满您的机器? 这可能是由于 x86 编译造成的,您应该将其更改为 x64。
2)有没有其他方法可以将我所有的图片都放入图片框而不填充我的记忆?
是和否。 如果您使用位图,它将在内存中分配图像。 如果您稍后将所有图像一起重新创建图像而不压缩它,那么如果您没有正确处理位图,您也可能会丢失一些内存。 您可以加载它们,压缩它们,然后处理原始的,将压缩/优化的保存在内存中。
此外,请记住在使用后始终处理您的位图。 GC 通常会处理它们,但您应该始终处理它们:
using (Bitmap bitmap = new Bitmap("file.jpg")
{
// bitmap handling here
}
当然,如果您在图片框中显示它,则无法处理它,但同样,您的问题并不完全清楚。
没有您的代码,我无法为您提供更好的答案,如果您更新问题,我很乐意编辑此答案。
读:
更新
修复您的线程后,我注意到您提供了一个图像,但格式已损坏。
阅读我的回答,它应该对您有所帮助(特别是压缩部分)。 您也可以更改为 x64。
更新 2 - 压缩代码示例
public void ExampleMethod()
{
pictureBox1.Image = GetCompressedFile("file.jpg", quality: 10);
}
private Image GetCompressedFile(string fileName, long quality)
{
using (Bitmap bitmap = new Bitmap(fileName))
{
return GetCompressedBitmap(bitmap, quality);
}
}
private Image GetCompressedBitmap(Bitmap bmp, long quality)
{
using (var mss = new MemoryStream())
{
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
ImageCodecInfo imageCodec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(o => o.FormatID == ImageFormat.Jpeg.Guid);
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = qualityParam;
bmp.Save(mss, imageCodec, parameters);
return Image.FromStream(mss);
}
}
在质量参数中设置质量。 100 表示 100%,50 表示 50%。
尝试将质量设置为 10,看看它是否有效。
从代码中删除所有 Bitmap bmp = new Bitmap,并与您的PictureBoxInstance.Image = GetCompressedFile(...);
一起显示PictureBoxInstance.Image = GetCompressedFile(...);
检查ExampleMethod()
。
代码基于: https : //stackoverflow.com/a/48274706/4352946
不过,您必须记住,即使使用 Dispose,也不会立即释放内存,您应该等待 GC。
PS:在旅途中压缩文件你可能最终会在内存中得到两个图像(压缩的和未压缩的)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.