我正在创建一个在计时器上运行的应用程序,每个刻度我想截取屏幕并将其保存到磁盘。这应该在后台运行,所以我希望它占用尽可能少的CPU时间。但是,当我进行性能分析时,我发现大约40%的时间花在了Bitmap.Save
上,我的CPU使用率平均高达10%-15%左右(这是一台旧计算机)
所以我的问题是,有没有办法限制图像保存过程,以便Bitmap.Save
不会使用这么多处理器时间?
我已经尝试设置Thread.CurrentThread.Priority = ThreadPriority.Lowest;
但是没有太大变化,也没有使用线程池。
这就是我正在做的事情:
public static void SaveScreenshot(string path)
{
Bitmap bmp = TakeScreenshot();
Directory.CreateDirectory(Path.GetDirectoryName(path));
bmp.Save(path);
bmp.Dispose();
}
答案 0 :(得分:0)
您无法更改保存图像所需的CPU使用量(同时保持压缩率和图像类型)。只要线程具有低优先级,压缩就使用所有可用的CPU应该没有问题。如果还有另一个具有更高优先级的线程要运行,则压缩将自动受到限制 如果在具有正常优先级的其他应用程序中运行繁重的计算,则应该看到压缩的CPU使用率较低。
然而,图像压缩不一定是CPU绑定的。它可能是I / O绑定,即等待从/向磁盘读/写。不幸的是,这比CPU绑定任务更难控制。