ss1271's Site

风餐露宿,不可一日无码.

Windows Phone上奇怪的OutOfMemory Exception

| Comments

最近在步履维艰地做Windows Phone上的开发工作。 按道理说C#这种东西没什么难点,语法什么的是从Javascript,Java以及C++拼凑出来的,外加配合Silverlight进行各种图形化的布局设计,应该是可以和堆积木一般轻松做出程序的。 事实哪有那么简单。我感觉我被C#和微软几乎和白纸一样的API文档狠狠坑了一笔。 撇开吐槽,先看看我最近几天遇到的奇葩问题之一:OutOfMemory Exception 因为百思不得其解,所以我放到StackOverflow上请教高人,这是本来的问题描述,里面有相关的代码。我完全的不能理解一部现代手机(Lumia 800)512MB RAM,加载一个约1632x1224尺寸的JPEG图片居然会OutOfMemory,如果这都可以的话,那微软我能理解你为毛到现在Windows Phone市场占有率还不到10%了。 抱怨归抱怨,后来第二天上班的时候我暂时跳过了这个问题,结果在网上搜资料的时候连带搜到了另一个人遇到的OutOfMemory,以及一个靠谱的答案:
I have also gone through this damm issue of WP7 or WP7.5. There is a huge issue with Images in Windows phone 7. A image of appox size 900kb when read from Isolated storage as stream and set as a source of Bitmap class object than u will see there is huge change/rise in memory usage (in my case 5-6MB). Just go through this website and u will understand the rest. Silverlight-s-big-image-problem-and-what-you-can-do-about-it For long image listing issue 1. Scale down the images u get from the server. 2. Use LongListSelector tool to list images using data virtualization technique
哦,如此。因为傻缺SilverLight自己本身的bug导致的这个问题。我原先使用的是WriteableBitmapEx库做图片的Resize。那现在按照回答者的建议,改用Transform呢?于是问题就这么解决了。 不过,虽然OutOfMemory解决了,但是我还是没搞明白为什么一个2448x3264尺寸的图片加载的时候读出的尺寸却是1224x1632。

Comments