【发布时间】:2020-02-07 05:24:33
【问题描述】:
首先,给出一个清晰的画面。
在我的课上,我有:
Color FocusArea;
Bitmap FocusImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
还有一个截图的小功能
private void Screenshot()
{
Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(screenshot);
g.CopyFromScreen(startscanx, startscany, 0, 0, scanarea, CopyPixelOperation.SourceCopy);
g.Dispose();
FocusImage = screenshot;
//screenshot.Dispose(); // Shit happens when Disposing this one, wtf ?
}
大约一分钟后(每秒 +- 3 到 6 个屏幕截图),内存已累积到大约 4 到 10 GB 并且明显崩溃。
它在崩溃时指出的行是:
Bitmap screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
我在将屏幕截图放入FocusImage 后尝试处理它,但是在我的应用程序中使用ForusImage 时它立即崩溃,我想我在这里做了一些可怕的错误,我只是不知道是什么,我希望你能帮我指出我做错了什么?
【问题讨论】:
-
如果
FocusImage是你类中的一个字段,那么a)你可能不想将它初始化为new Bitmap,并且b)你当然应该Dispose它之前分配screenshot给它。 -
请尝试更准确一点:不要谈论“崩溃”,而是告诉我们确切的错误消息和导致它的行以及错误堆栈!您究竟将所有这些图像存储在哪里?
-
FocusImage.Dispose();焦点图像 = 截图;似乎可以解决问题,遗憾的是我现在不能完全测试它,因为我睡前,但明天我下班回来时会进行压力测试。