WPF 3D视频内存效率

时间:2009-12-23 06:18:33

标签: wpf performance memory animation

我试着尽可能地解释我的情况,对不起,如果不太清楚......

我有一个Viewport3D,它包含一些像大水晶一样的大型3d矩形。

当用户点击其中一个水晶时,我会在使用ImageBrush点击的地方为水晶添加新材料。然后我迭代一个位图列表(List<BitmapImage>集合)并更新每帧的ImageBrush以在3D晶体上创建动画。

这很好用,我在水晶上有多达5种不同的效果,但在分析我的应用程序之后,我发现由于mipmap(我认为)和3d呈现的方式,我的视频内存跳过屋顶! !

根据我的计算,如果我有75帧动画,400x400以每像素4个字节运行,并且有5个不同的动画堆积,你可以看到它如何变大:)

75 * 400 * 400 * 4 * 5 = ~250MB

这是一个问题,不仅仅是因为它的大小,而且BitmapImages保留在视频内存中,直到我将它们设为空,这非常烦人且性能成本高。

我想解决这个问题的方法是从拥有List<BitmapImage>集合改为拥有List<Byte[]>而不是更新ImageSource,我想尝试使用写WriteableBitmap它的字节。

问题是我不知道如何从PNG文件中读取字节,然后创建一个WriteableBitmap并以高效的方式反复写入字节。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

WriteableBitmap实际上对性能非常糟糕,即使它需要脏区域。尝试使用InteropBitmap。我有一个班级可以在这里找到它:

http://silverlightviewport.codeplex.com/SourceControl/changeset/view/33100#809062