【发布时间】:2015-12-05 15:32:49
【问题描述】:
我在这里有一个示例 wpf 应用程序,我想知道为什么 BMP 的加载速度比 PNG 快。这是确切的设置:
- Windows 7
- Visual Studio 2013
- landscape.png, 1920x1080, 2.4mb
- landscape.bmp, 1920x1080, 5.6mb
- wpf-app, class MainWindow.xaml.cs constructor, no other code before
代码:
var sw = Stopwatch.StartNew();
var Bitmap1 = new Bitmap("landscape.bmp");
long t1 = sw.ElapsedMilliseconds;
sw.Restart();
var Bitmap2 = new Bitmap("landscape.png");
long t2 = sw.ElapsedMilliseconds;
所以 BMP 加载大约需要 6 毫秒,PNG 需要 40 毫秒。
为什么会这样?
【问题讨论】:
-
你在调试器中运行过这个吗?你烧伤了吗?这些都会影响时间。此外,
Bitmap类可能必须解码 png,而它可以获取 bmp 的本来面目。 -
要执行严格的测试,您应该设置一个测试环境。代码必须烧录,测试必须重复多次,并且您必须考虑缓存(在这种情况下磁盘缓存将发挥巨大作用)。毕竟已经正确完成......你可能会看到一个非常小的差异......png要复杂得多,它必须被解压缩。这可能需要几毫秒(对于足够大的图像来衡量这种差异)。
-
检查简单地将文件读入内存的速度 - 如果仍然显示类似的时间差,则可能与文件存储有关。如果加载速度是原来的两倍,那么问题可能出在解码上。
-
检查
Bitmap类的作用。 PNG的优点:要读取的数据要少得多。缺点:解码部分可能写得不好。我们不知道。 -
另请注意,您的测试可能与您的 WPF 应用程序完全无关,因为在 WPF 中您将通过 Uri 或 FileStream 创建 BitmapImage 或 BitmapFrame,而不是使用 WinForms Bitmap 类。
标签: c# wpf performance bitmap png