减少Bitmap.Save的CPU使用率

时间:2013-06-05 10:23:22

标签: .net performance io bitmap

我正在创建一个在计时器上运行的应用程序,每个刻度我想截取屏幕并将其保存到磁盘。这应该在后台运行,所以我希望它占用尽可能少的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();
    }

1 个答案:

答案 0 :(得分:0)

您无法更改保存图像所需的CPU使用量(同时保持压缩率和图像类型)。只要线程具有低优先级,压缩就使用所有可用的CPU应该没有问题。如果还有另一个具有更高优先级的线程要运行,则压缩将自动受到限制 如果在具有正常优先级的其他应用程序中运行繁重的计算,则应该看到压缩的CPU使用率较低。

然而,图像压缩不一定是CPU绑定的。它可能是I / O绑定,即等待从/向磁盘读/写。不幸的是,这比CPU绑定任务更难控制。