官方提供的工具:網盤地址:http://pan.baidu.com/s/1pKgrsrphtml
官方下載地址:https://download.xamarin.com/profiler/profiler-windows.msi數據庫
Xamarin Profiler,使用此工具,幫助咱們進行軟件性能的調優,找到應用的瓶頸。json
內存佔用較高的代碼調用進行監視。快速解決影響程序性能的代碼。windows
關於此工具的使用,請參見:緩存
https://developer.xamarin.com/guides/cross-platform/deployment,_testing,_and_metrics/服務器
關於程序性能提高的幾條建議:網絡
官方文檔:https://developer.xamarin.com/guides/cross-platform/deployment,_testing,_and_metrics/memory_perf_best_practices/app
一個差勁兒的應用,會體如今不少方面,如:下拉滾動卡頓,CPU佔用極高,耗費電池電量,內存佔用很高等等,從而形成的用戶交互不友好。less
爲了提高用戶體驗,必須對開發的程序進行性能調優。異步
性能調優的步驟:
1 使用監視工具找出內存佔用較高的代碼區域
2 使用真機測試,而不是用模擬器
3 使用多種不一樣型號 不一樣配置的真機測試
4 測試前,關閉其餘應用,減小沒必要要的干擾
優化建議:
1 使用
接口,進行釋放非託管的資源,IO流,HTTP網絡流,數據庫讀寫流等。使用實現了此接口的類的實例的操做,儘可能使用Using (){}代碼塊。
public void ReadText (string filename) { ... string text; using (StreamReader reader = new StreamReader (filename)) { text = reader.ReadToEnd (); } ... }public void ReadText (string filename) { ... string text; using (StreamReader reader = new StreamReader (filename)) { text = reader.ReadToEnd (); } ... }
2 在try catch 代碼塊中,必定要對實現了IDisposable的資源進行釋放
3 對事件進行退訂操做。咱們通常對實現 進行 訂閱 add 操做,在使用的時候 ,儘可能減小一個監聽的屢次訂閱,減小多播委託的觸發調用。
以下面的代碼:
public class Publisher
{
public event EventHandler MyEvent;
public void OnMyEventFires ()
{
if (MyEvent != null) {
MyEvent (this, EventArgs.Empty);
}
}
}
public class Subscriber : IDisposable
{
readonly Publisher publisher;
public Subscriber (Publisher publish)
{
publisher = publish;
publisher.MyEvent += OnMyEventFires;
}
void OnMyEventFires (object sender, EventArgs e)
{
Debug.WriteLine ("The publisher notified the subscriber of an event");
}
public void Dispose ()
{
publisher.MyEvent -= OnMyEventFires;
}
}
在釋放的時候,就退訂了事件的訂閱。
4 注意:高潮來了
在託管代碼中,儘可能不要使用不一樣類型的類的相互嵌套。一旦出現嵌套,那麼除非強制銷燬兩個相互依賴的實例,不然,這相互依賴的實例不會被GC回收掉。好比如下的代碼:
class A 依賴class B ,一樣,B中有A。這種嵌套一旦造成,就沒法讓GC覺得兩個實例是沒有被引用,從而沒法銷燬。
5 對耗時操做,使用異步方法,防止阻塞UI。對這類操做,使用.net 4.0後的 Task async await 搭配,封裝異步的調用。
6 使用GC進行強制垃圾回收,Xamarin提供了兩種垃圾回收器。
Sgen的垃圾回收性能效果是很客觀的。
7 減小應用程序包的體積
使用Xamarin的 Link技術。
The linker provides three different settings to control its behavior:
本身手工對比,發現,Link後的dll體積比非Link的減小許多。Xamarin團隊,實現了將跟程序無關的API進行移除的操做。大大減小了程序包的體積。
8 優化圖片資源
由於圖片資源是要被加載進入內存中的,過多的圖片資源,可能致使CPU佔用較高,內存爆滿,對圖片等素材進行壓縮處理,在不失真,不損失分辨率的狀況下,對圖片資源進行壓縮。
在關閉窗口的時候,釋放掉圖片資源。
9 減小在程序加載的時候初始化過多的資源
通常在程序啓動的時候,咱們開啓一個過渡動畫效果,提示用戶程序啓動中。等初始化完畢後,進入程序。可是不要過於耗時的初始化,感受是程序假死。
因此在程序處於激活的時候,咱們若是加載一些本地資源 文本 或者二進制數據 或者xml等,儘可能把關鍵數據加載完畢,便可。一些網絡操做等,若是沒有必要,就不要進行。
10 減小程序客戶端跟網絡的通訊
一些靜態數據塊,好比類別 科目 考試的試題 單詞庫 離線地圖數據包等等。若是不是升級更新,那麼這些數據塊在第一次加載到客戶端後,不用常常更新。每次去網絡檢索下,是否有新的數據包,有的話,提示用戶更新。
咱們能夠將這些數據 打包成特定的文本文件 xml文件 json數據文件 db 文件 dat二進制數據文件。
在客戶端儘量多的緩存這些數據塊,會極大的提升用戶體驗。而不是每次都要從服務器端,下載大量的數據包。
固然,針對一些在線視頻 IM通訊 監測 股票金融的引用,對實時信息要求較高的。咱們就不要緩存,在提升數據通訊質量上,作優化。