我目前正在研究一個Silverlight 4.0應用程序,它在da DataGrid控件中顯示大約13.000行。一個項目包含大約40個字符串屬性和一個整數。頭腦風暴:如何在Silverlight中實現背景計算?
在包含該網格的頁面上,用戶可以設置不同的權重。點擊「更新」按鈕後,Silverlight應根據設置進行一些計算。
在計算過程中,反射被大量使用(和必要)來獲取字符串屬性的值。最後,計算得分並寫入整數字段。這需要爲每個13.000個對象完成。
目前,作爲臨時解決方案,我使用BackgroundWorker
實例和Grids Dispatcher(進入UI線程並允許訪問Grid的ItemsSource屬性),遍歷每個項目並計算得分。 此過程需要大約3分鐘,並且太長,因爲用戶不想等待超過幾秒鐘。不幸的是PLinq & Co不包含在Silverlight 4中,甚至我嘗試爲此實現一個多線程解決方案失敗了,因爲我需要回退到UI線程( - > Dispatcher)來更新每個元素(實現INotifyPropertyChanged
這是轉發給網格)並訪問ItemsSource。所以,即使使用半並行解決方案,由於依賴於UI線程,它也不是很快。
除了顯示數據之外,用戶需要能夠過濾默認不支持的數據。因此我創建了一個類似於this one的類,該類實現了ICollectionView
接口。
你有什麼想法或建議我可以嘗試嗎?
在此先感謝!
你說得對,它速度很快(我沒有想到它可以這麼快就沒有使用任何並行處理)。謝謝! :) – muffel