[05.15] 关于 Windows Phone 7 Silverligth 性能改进

这些天写新浪微博学习了很多东西,发现很多东西不记下来还是会忘。所以开博来记录一下。

今天暂时考虑记录Performance这一块,因为一个月的开发下来,发现ListBox的确卡的要命。
那么没办法我得把ListBox 给修理一番,但是途中发现软件很多可以改进的地方。
例如一些Visible的控制,Image的处理,WebClient改为HttpWebRequest等,ProgressBar更改。
主要都是一个原则,尽量少的占用UI线程的资源,尽可能后台线程处理,到处理完毕再Invoke。

但是以前就总觉得什么方便用什么,看来还是不行啊,移动平台资源有限,浪费可耻啊。
主要是影响用户体验什么的,很不爽。

1.程序启动

a.启动过程可以用SplashImage,这个没问题,有一个有意思的。
b.System.Threading.Thread.Sleep(Int32) 这个可以让进程停留在等待画面,也就是让第一屏停留更久。
c.最小化程序的assembly,语言文件编译为附加的assembly,资源选用content模式。
d.图片尽量选用jpg而不是png,除非需要使用到透明处理。
e.MS团队建议编译为很多小的链接库而不是都放在主程序内,甚至可以每个页面配一个Project???
f.然后是注意页面载入的过程,最好是在XAML解析完毕之后再处理Heavy long-running process,原理是利用页面 LayoutUpdated 事件的触发。
代码如下:

private bool _onNavigatedToCalled = false;

public Page()
{
    InitializeComponent();
    LayoutUpdated += new EventHandler(Page_LayoutUpdated);
}

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    _onNavigatedToCalled = true;
}

private void Page_LayoutUpdated(object sender, EventArgs e)
{
    if (_onNavigatedToCalled == true)
    {
        _onNavigatedToCalled = false;
        Dispatcher.BeginInvoke(() => 
            {
                // Do your stuff here, in the “future”                    }
            }
        );
    }            
}

g.对隔离存储空间内文件的读写最好注意掌控时间,如果需要长时间读取的考虑利用Dispatcher。
h.尽量减少UI线程被Block,能block UI 线程的事件有 Push Notification,NetWork Information ,Location Services,Radio。

2.线程的理解

WP7里面有几种线程
a.UI 线程。感觉有点类似前台。
b.Composition 线程。小秘书,经常用来递送数据给GPU。
c.Animation 线程。动画,处理story-board比较多,传递给GPU。
d.BackgroundWorker。异步处理背景线程,DoWork,还有Complete实现Invoke。

3.图像处理

a.我纠结了很久的WP7调试时边上那一条不知什么东西的,可以通过下面代码禁用掉。

Application.Current.Host.Settings.EnableFrameRateCounter = false;

见图,其中第一项第二项建议值为 30-60,Fill Rate在下一条详解:

b.Fill Rate。WP7有一个Fill Rate限制,控制在2.5以内为佳,上3会产生警告。这个值的含义是显示出绘制了多少个屏幕长度的图像。

4.重头戏来了ListBox。

网上可以下载到很多关于WPSL的ListBox改进版,有一个RadControl 里面包含很多List 有Jump List 和 DataBound List,但是有个很有趣的地方就是他们做的很多控件跟Silverlight.Toolkit 里面很多好像有相似,毕竟SLTK是开源项目,这方面就不做过多深究了。网上这个 Control 包卖1xx 美元,其他途径就不多透露了哈。

那么竟然说了很多控件 就不止这个了。下面的链接都有详细描述啦。

5.参考链接:

Deferredload Listbox:

http://blogs.msdn.com/b/delay/archive/2010/09/08/never-do-today-what-you-can-put-off-till-tomorrow-deferredloadlistbox-and-stackpanel-help-windows-phone-7-lists-scroll-smoothly-and-consistently.aspx

Performance silverlight sample:

http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3a8636bf-185f-449a-a0ce-83502b9ec0ec

List Box Performance:

http://blogs.msdn.com/b/slmperf/archive/2010/10/06/silverlight-for-windows-phone-7-listbox-scroll-performance.aspx

Lazy ListBox:

http://blogs.msdn.com/b/ptorr/archive/2010/10/12/procrastination-ftw-lazylistbox-should-improve-your-scrolling-performance-and-responsiveness.aspx

posted @ 2011-05-15 01:27  akita  阅读(683)  评论(3编辑  收藏  举报