【发布时间】:2020-11-30 13:47:15
【问题描述】:
所以我有一个代码,我在其中创建位图和图形,并使用 CopyFromScreen 方法截取屏幕截图,然后我继续将其分配给图片框。它在一个线程内,所以它一直在运行。问题是 RAM 消耗不断增加,如果我尝试使用 graphics.Dispose() 和 bitmap.Dispose(),它会给出错误,因为在删除引用时,pictureBox 将没有任何东西可以显示。我已经尝试将位图克隆到另一个位图并处理原始位图,但结果相同,RAM 仍然上升。
这更像是一个问题,而不是一个有用的项目,但想法是图片框获得整个屏幕的实时副本。
我该如何解决这个问题?
代码示例:
while (run)
{
bitmap1 = new Bitmap(1920, 1080);
g = Graphics.FromImage(bitmap1);
g.CopyFromScreen(0, 0, 0, 0, size);
form.setPictureBox1(bitmap1);
g.Dispose();
bitmap1.Dispose();
GC.SuppressFinalize(this);
Thread.Sleep(500);
}
【问题讨论】:
-
想一想:我给你 50 美元花。你到了商店,把它放在柜台上。在收银员拿走它之前,我抢走了它并点燃了它。你还能花那50美元吗?不,你在这里做同样的事情。将图像提供给图片框后,您将立即对其进行处理(请注意,将其分配给图片框时您并未制作副本 - 它是相同的图像)。处理旧图像不是更有意义吗?
-
微软有完整的代码示例here。