2013-06-05 43 views
0

我正在创建一个在定时器上运行的应用程序,并且我想要截取每个刻度并将其保存到磁盘。这应该在后台运行,所以我希望它占用尽可能少的CPU时间。然而,当我运行性能分析时,我发现大约40%的时间花费在Bitmap.Save,我的CPU使用率平均高达10%-15%左右(这是一台旧电脑)减少Bitmap.Save的CPU使用率。

所以我的问题是,有什么办法来节制图像保存过程,以便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

需要的输出文件格式是什么? PNG,JPEG,BMP ..,? – apdevelop

+0

这是PNG。也许它花费了很多时间在压缩上? –

+0

刚刚测试过,保存为BMP的速度大约快了5-6倍,但也导致了30倍大的文件。 JPEG大约快两倍,大小相同,但它具有有损压缩。有没有办法在压缩PNG图像时限制CPU使用率,或者这只是性能和图像尺寸/质量之间的必然折衷? –

回答

0

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

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

相关问题