使用C#位图更高效地将图像保存到磁盘

使用C#位图更高效地将图像保存到磁盘,c#,bitmap,bitmapimage,C#,Bitmap,Bitmapimage,我正在使用一个C#程序每秒保存大约10个660x330大小的屏幕截图 这个C#程序被用作GTAV游戏的.dll脚本 Bitmap catchBmp = new Bitmap(300, 660, System.Drawing.Imaging.PixelFormat.Format32bppRgb); Graphics g = Graphics.FromImage(catchBmp); g.CopyFromScreen(new Point(Screen.AllScreens[0].Bounds.Wid

我正在使用一个C#程序每秒保存大约10个660x330大小的屏幕截图

这个C#程序被用作GTAV游戏的.dll脚本

Bitmap catchBmp = new Bitmap(300, 660, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
Graphics g = Graphics.FromImage(catchBmp);
g.CopyFromScreen(new Point(Screen.AllScreens[0].Bounds.Width / 3 + 170, Screen.AllScreens[0].Bounds.Height / 6 + 60), new Point(0, 0), new Size(300, 660));
string tmp = Path.Combine(path, modNum.ToString(), location);
if (!Directory.Exists(tmp))
{
    Directory.CreateDirectory(tmp);
}
string tmp_filename = tmp + "\\" + location + "_" + weather + "_" + time + "_" + anim + "_" + view_angle + "_" + modNum + "_" + picNum.ToString() + ".jpg";
catchBmp.Save(tmp_filename);
UI.ShowSubtitle(tmp_filename);
Wait(100);
catchBmp.Dispose();
g.Dispose();      
上面的代码以循环方式运行,每秒运行大约10次

脚本运行大约6小时后,我的硬盘似乎达到最大使用量,脚本崩溃

有没有办法防止这种情况?我想一次运行这个脚本几天


使用线程保存图像会有帮助吗?或者在将队列保存到磁盘时实现队列?

这似乎是一个磁盘无法跟上的简单问题

一种选择是使用更高效的存储格式,即另存为视频文件,该文件可以利用帧之间的差异进行更好的压缩。例如,见。虽然这会减少正在写入的数据的大小,但会增加系统的CPU负载

另一种选择是降低图像文件的质量,方法是降低分辨率或分辨率。您还可以切换图像格式。Jpeg是一个古老的标准,并且倾向于以低比特率生成低质量的图像,像这样一种更现代的格式可能会更好

第三种选择是简单地获得更快的磁盘,和/或确保程序以独占方式访问磁盘


使用队列或线程可能不会有多大帮助,因为代码不会阻塞任何其他内容,而且它只能以尽可能快的速度运行。但是,我建议在位图之前处理图形,并在处理之后移动等待。

当您说“最大使用率”时,我认为您的意思是您可以写入磁盘的速度不足以跟上写入图像的速度,而不是您的硬盘空间不足,对吗?是的,这是正确的。磁盘无法跟上写入多个映像的速度,程序崩溃。我尝试写入SSD,但没有遇到任何问题,只是一天后空间不足。在写入hdd并将其从SSD中删除之前,我想到将SSD作为缓存写入,但我希望尽可能避免对SSD进行不必要的读/写操作,以延长其使用寿命,这意味着每天都有
864000
图像。你打算用它做什么:)?也许每小时建立一个子文件夹?不管怎么说,处理这一切似乎有点难以承受。也许把它全部转换成视频格式?压缩档案?是否分发到NAS存储?异步上传到web存储?顺便说一下,您应该使用
使用
块处理
catchBmp
g