我试着尽可能地解释我的情况,对不起,如果不太清楚......
我有一个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
并以高效的方式反复写入字节。
有人可以帮帮我吗?
答案 0 :(得分:1)
WriteableBitmap实际上对性能非常糟糕,即使它需要脏区域。尝试使用InteropBitmap。我有一个班级可以在这里找到它:
http://silverlightviewport.codeplex.com/SourceControl/changeset/view/33100#809062