微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于图片对象BitmapImage的BitmapCreateOptions

BitmapImage bitmapImage = new BitmapImage(new Uri(WebPath(uri), UriKind.Relative));

的方式直接从Temporary Internet Files文件夹中提取图片而不会启动再次下载了,共用缓存的性质使得Silverlight开发网络游戏更加简单,更加华丽。

但是,这里我想向大家强调的是一个非常重要且容易疏漏的问题:请大家严重清楚认识BitmapImageCreateOptions的三种缓存模式BitmapCreateOptions.None、BitmapCreateOptions.DelayCreation、BitmapCreateOptions.IgnoreImageCache。

CreateOptions设定为CreateOptions = BitmapCreateOptions.None时,不仅Temporary Internet Files文件夹中会保存一份该图片的原件,而且在内存中同样也会自动存一份;这就意味着我们就算人为的将Temporary Internet Files文件夹清空,当Silverlight程序再次请求获取图片时,BitmapImage会直接从内存里提取而不会再次去下载或寻找Temporary Internet Files文件夹。

BitmapCreateOptions. DelayCreation时,顾名思义图象是被延迟加载的,它是BitmapImage认值。图片仅存于Temporary Internet Files中,虽然减少了内存的占用,但在大图片重新加载时会相对卡些,毕竟读取内存的速度肯定是优于硬盘的;这还其次了,更大的问题是经过我反复测试,GC会时不时的作怪以至图像时常无法正确显示,大家可以自行尝试在特定地方例如场景切换完毕后执行GC.Collect()会出现一些相当诡异的事情,特别提醒大家注意。

至于把CreateOptions设定为CreateOptions = BitmapCreateOptions. IgnoreImageCache则更加危险了,细节还请大家自行体会。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐