我創建一個基於砂的Windows Phone 8的比賽,我想辦法來提高性能。WP7砂物理性能改進
砂從頂部下降並且有填充碰撞,所以它必須被計算的每個幀。
當前的實現是這樣的:
- 有一個短[,]數組與像素信息,這樣的像素被裝滿沙子/障礙/線
- 沙算法是非常簡單的。我謹每一粒隨機左右,如果有空間存在,讓它掉下來,如果有以下
- 對於我創建的水平不變的背景圖像的WriteableBitmap的性能的原因空間開始
- 當我畫我複製領域預創建WriteableBitmap的,通過WriteableBitmap.Pixels []發生變化的部分添加到它並將其設置爲通過ImageBrush.ImageSource畫布背景
- 我做的每個更新計算在後臺線程沙運動,讓UI線程進行繪製。 這意味着我會瀏覽整個short [,]數組,並查看像素[]是否是沙子,如果是計算粒子運動。之後,將其複製到背景圖像等
有了這個設置,我得到了在調試模式下的諾基亞Lumia 820,這似乎慢了15 fps。
我當然可以進行一些小的優化,比如使用隨機地圖而不是random.Next或使用一個大的short []而不是short [,],但我註釋了我的代碼的不同部分,我似乎在這個設置中某處丟失了一個主要的性能接收器。
沒有任何沙灘運動,你會得到多少FPS?(註釋掉)?即問題真的是沙算法,或者只是繪圖部分? – rlb 2013-03-15 07:00:21
這是很奇怪的,如果我讓後臺線程睡眠(20)每轉一圈,我得到18 fps的運動,如果我評論沙運動出它上升到每秒30幀。但是如果我把睡眠設置得像睡眠一樣(5),我得到的移動速度是25fps,如果我將它評論出來,它會分解爲0。沙運動和低睡眠值也會發生同樣的情況,這是我讓它睡覺的原因。嗯,現在我輸入這個,這可能是因爲UI線程獲取新的繪製調用,同時仍然處理舊的?我應該研究一下。 – Dreiven 2013-03-15 13:59:48
未完成的UI線程確實使我的應用程序失效。現在,我可以達到21fps的沙運動和無睡眠(),最高可達33fps,無沙運動。我修復它像這樣http:// stackoverflow。com/questions/9453553/windows-phone-how-to-tell-when-deployment-current-dispatcher-begininvoke-has-co – Dreiven 2013-03-15 14:50:49