BitmapImage bitmapImage = new BitmapImage(new Uri(WebPath(uri), UriKind.Relative));
的方式直接从Temporary Internet Files文件夹中提取该图片而不会启动再次下载了,共用缓存的性质使得Silverlight开发网络游戏更加简单,更加华丽。
但是,这里我想向大家强调的是一个非常重要且容易疏漏的问题:请大家严重清楚认识BitmapImage的CreateOptions的三种缓存模式:BitmapCreateOptions.None、BitmapCreateOptions.DelayCreation、BitmapCreateOptions.IgnoreImageCache。
当CreateOptions设定为CreateOptions = BitmapCreateOptions.None时,不仅Temporary Internet Files文件夹中会保存一份该图片的原件,而且在内存中同样也会自动存一份;这就意味着我们就算人为的将Temporary Internet Files文件夹清空,当Silverlight程序再次请求获取该图片时,BitmapImage会直接从内存里提取而不会再次去下载或寻找Temporary Internet Files文件夹。
当CreateOptions设定为CreateOptions = BitmapCreateOptions. DelayCreation时,顾名思义图象是被延迟加载的,它是BitmapImage的默认值。图片仅存于Temporary Internet Files中,虽然减少了内存的占用,但在大图片重新加载时会相对卡些,毕竟读取内存的速度肯定是优于硬盘的;这还其次了,更大的问题是经过我反复测试,GC会时不时的作怪以至图像时常无法正确显示,大家可以自行尝试在特定地方例如场景切换完毕后执行GC.Collect()会出现一些相当诡异的事情,特别提醒大家注意。
至于把CreateOptions设定为CreateOptions = BitmapCreateOptions. IgnoreImageCache则更加危险了,细节还请大家自行体会。
的方式直接从Temporary Internet Files文件夹中提取该图片而不会启动再次下载了,共用缓存的性质使得Silverlight开发网络游戏更加简单,更加华丽。
但是,这里我想向大家强调的是一个非常重要且容易疏漏的问题:请大家严重清楚认识BitmapImage的CreateOptions的三种缓存模式:BitmapCreateOptions.None、BitmapCreateOptions.DelayCreation、BitmapCreateOptions.IgnoreImageCache。
当CreateOptions设定为CreateOptions = BitmapCreateOptions.None时,不仅Temporary Internet Files文件夹中会保存一份该图片的原件,而且在内存中同样也会自动存一份;这就意味着我们就算人为的将Temporary Internet Files文件夹清空,当Silverlight程序再次请求获取该图片时,BitmapImage会直接从内存里提取而不会再次去下载或寻找Temporary Internet Files文件夹。
当CreateOptions设定为CreateOptions = BitmapCreateOptions. DelayCreation时,顾名思义图象是被延迟加载的,它是BitmapImage的默认值。图片仅存于Temporary Internet Files中,虽然减少了内存的占用,但在大图片重新加载时会相对卡些,毕竟读取内存的速度肯定是优于硬盘的;这还其次了,更大的问题是经过我反复测试,GC会时不时的作怪以至图像时常无法正确显示,大家可以自行尝试在特定地方例如场景切换完毕后执行GC.Collect()会出现一些相当诡异的事情,特别提醒大家注意。
至于把CreateOptions设定为CreateOptions = BitmapCreateOptions. IgnoreImageCache则更加危险了,细节还请大家自行体会。