日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows Phone性能优化建议

發布時間:2023/12/2 windows 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows Phone性能优化建议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Windows Phone性能優化建議 原文:Windows Phone性能優化建議

  • 使用background thread解碼圖片

???? 在Windows Phone中支持的圖片格式有jpg和png,微軟建議使用png格式的圖片,因為png格式的圖片在解碼速度上要比jpg快。那么我們怎么來控制用后臺線程來解碼圖片呢?看下面的代碼。

<Image Height="100" Width="100" Margin="12,0,9,0"><Image.Source><BitmapImage UriSource="{Binding ImgURL}" CreateOptions="BackgroundCreation"/></Image.Source> </Image> var bi = new BitmapImage(); bi.CreateOptions = BitmapCreateOptions.BackgroundCreation;

???? 這兩段代碼都設置了BitmapImage的CreateOptions屬性,這樣做避免了在UI線程來對圖片解碼,在使用過程中BackgroundCreation確實有效地提高了頁面的響應效率,尤其是在圖片密集型的頁面。需要注意的是,圖片位置可能出現短暫的空白,不過這段時間我們可以通過一個圖片占位符的方法來處理。CreateOptions屬性包括有四種:

  • None????????????????????????? 不對CreateOptions做任何設置。
  • DelayCreation???????????? 是BitmapImage的默認屬性,在必要時創建圖片。
  • IgnoreImageCache????? 圖片將不啟用緩存,適合于頻繁需要更新的圖片。
  • BackgroundCreation??? 圖片的解碼在后臺線程完成。
    • 減少不必要的PropertyChanged事件的觸發

    ???? 在MVVM模式的開發中,通過設置INotifyPropertyChanged接口使View作為一個觀察者,可以使我們方便的通過DataBinding更新UI內容,這里我們要說的其實PropertyChanged事件是一個冗長的方法。如果你使用的是VS2012或更高的版本使用工具欄的Code Map按鈕可以看到系統監聽的add_PropertyChanged事件,而且它在UI線程上執行。為了減少不必要的PropertyChanged事件的觸發,我們可以采用下面這種方法來對value的值提前做出判斷。

    public string Text {get { return _text;}set{if( _text == value) return;_text = value;RaisePropertyChanged("Text");} }
    • 減少Databinding中Converter的使用

    ???? 在Databinding中我們可以創建一個繼承自IValueConverter的類實現Convert方法來對綁定的值做進一步處理,這個處理會直接影響到綁定的速度,而且這個轉換是在UI線程執行的,如果我們把一個很重的方法放在了這個Converter里,那綁定的速度就可想而知了??傊?#xff0c;對后臺數據的處理還是在后臺線程中準備好之后在通知UI更新,盡量避免因為Converter造成的UI阻塞。

    • 開啟集合控件的虛擬化

    ???? 在之前的一篇博客中我們介紹了在Windows Phone中集合控件的使用。VirtualizingStackPanel是一個重要的概念,在ListBox中默認的Itmes的容器就是VirtualizingStackPanel,這個容器是虛擬化的,不同于StackPanel。它只創建了大約屏幕可見的數量,而非將ListBox中的Items一次全部創建,隨著上下滾動再次創建剩下為顯示在屏幕上的內容。這樣就大大節省了頁面首次渲染的時間。

    ???? VirtualizingStackPanel還有一個比較重要的屬性,就是VirtualizationMode。這個屬性有兩個值。

  • Standard 每次都會為容器的Item創建新的VirtualizingStackPanel,并回收之前創建的容器。
  • Recycling 重用之前創建的VirtualizingStackPanel。
  • ???? 顯然我們開啟VirtualizingStackPanel的Recycling模式來重用容器,避免新的容器的創建。下面是一個ListBox的示例代碼。

    <ListBox ItemsSource="{StaticResource data}" VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling" />
    • 動態加載PivotItem

    ???? 在Windows Phone開發中軸心控件Pivot絕對是一個布局很好的選擇。但是如果我們的頁面的PivotItem比較多,會直接影響到我們頁面的渲染時間,尤其是在首頁的時候,等待的時間可能會更加長。這時候我們可以考慮動態的加載PivotItem的方法來減輕首次加載頁面的時間,我們只需要在頁面定義空的PivotItem,再在OnLoadingPivotItem的事件中動態的創建UserControl并加入到相應的PivotItem的Content中即可。

    <controls:Pivot x:Name="pivot" OnLoadingPivotItem="OnLoading"><controls:PivotItem x:Name="firstItem"/> </controls:Pivot> public void OnLoading(PivotItem item) {if(item.Content == null){var userControl = new CustemControl();item.Content = userControl;} }
    • 為ObservableCollection添加AddRange方法

    ???? ObservableCollection絕對是數據綁定過程中重要的集合,使用這個集合可以通過Add方法方便的更新集合。但當數據量大的情況下我們是否可以考慮自定義一個AddRange方法,來替換掉每次Add的時候觸發的NotifyCollectionChangedAction.Add類型的事件。而改用NotifyCollectionChangedAction.Reset使整個頁面只刷新一次。那么就來看看這個擴展類的寫法。

    public class ObservableCollectionEx<T> : ObservableCollection<T> {public void AddRange(IEnumerable<T> list){foreach (T item in list){Items.Add(item);}OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));OnPropertyChanged(“Count”);} }
    • 使用Async、await、Task<TResult>異步編程

    ?

    ?

    posted on 2014-04-10 13:01 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

    轉載于:https://www.cnblogs.com/lonelyxmas/p/3656247.html

    總結

    以上是生活随笔為你收集整理的Windows Phone性能优化建议的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。