gpt4 book ai didi

C#:使用位图时如何减少内存和 CPU 消耗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:11 28 4
gpt4 key购买 nike

我有一个处理图像编辑(裁剪和调整大小)的 Windows 应用程序项目。不幸的是,这些图像处理会消耗大量内存和 CPU 资源(很容易达到 600MB 或 50% cpu),而且它只是裁剪和调整大小 2.5MB (2300*5400px) 的 gif 图像。不仅如此,由于资源消耗大,程序在调整大小时卡住......

    public static Image Resize(Image imgToResize, Size size)
{
Bitmap b = new Bitmap(size.Width, size.Height);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.Default;
g.SmoothingMode = SmoothingMode.HighSpeed;
g.PixelOffsetMode = PixelOffsetMode.Default;
g.DrawImage(imgToResize, 0, 0, size.Width, size.Height);
g.Dispose();

return (Image)b;
}

public static Image Crop(Image img, Point p1, Point p2)
{
Rectangle cropArea = new Rectangle(p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.Y);
return (img as Bitmap).Clone(cropArea, img.PixelFormat);
}

我应该使用什么方法来避免这种情况?我已经尝试过以多种格式将其压缩到内存流中,但没有帮助(甚至变得更糟)

注意:我使用标准的 .NET 绘图库:System.Drawing、System.Drawing.Imaging

最佳答案

您的代码正在创建图像的副本,因此您应该预计在调用这些方法时非托管内存使用量会增加。重要的是你对原作的处理。你最好摆脱它,这样它就不会再占用内存了。为此,您必须调用其 Dispose() 方法。等待垃圾收集器完成它需要很长时间。 Bitmap 类占用很少的托管内存,但占用大量非托管内存。

关于C#:使用位图时如何减少内存和 CPU 消耗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7153864/

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