私は現在、DataGridコントロールで約13.000行を表示するSilverlight 4.0アプリケーションを開発中です。 1つのアイテムには、約40の文字列プロパティと1つの整数プロパティが含まれます。ブレインストーミング:Silverlightでバックグラウンド計算を実現する方法は?
グリッドを含むページには、ユーザーがさまざまな重み付けを設定できるパネルがあります。 "更新"ボタンをクリックした後、Silverlightはその設定に応じていくつかの計算を行う必要があります。
リフレクションは、Stringプロパティの値を取得するために頻繁に使用されます(必要になります)。最終的にスコアが計算され、整数フィールドに書き込まれます。これは13.000個のオブジェクトごとに行う必要があります。
現在、私はBackgroundWorker
インスタンスとグリッドディスパッチャー(UIスレッドに入り、グリッドのItemsSourceプロパティにアクセスできるようにする)を使用し、各アイテムを繰り返し、スコアを計算します。 このプロセスには約3分かかり、ユーザーが数秒以上待たないように長すぎます。残念ながら、PLinq & CoはSilverlight 4には含まれていません。さらに、UIスレッド( - > Dispatcher)に戻って各要素を更新する必要があるため、このためにマルチスレッドソリューションを実装しようとしましたが(INotifyPropertyChanged
グリッドに転送されます)、ItemsSourceにアクセスします。したがって、セミパラレルソリューションを使用する場合でも、UIスレッドに依存するため、実際には高速ではありません。
データを表示するだけで、ユーザーはデフォルトでサポートされていないデータをフィルタ処理できる必要があります。したがって、私はICollectionView
インターフェイスを実装するthis oneに似たクラスを作成しました。
私は何を試すことができると思いますか?
ありがとうございます!
あなたは正しいですが、かなり高速です(並列処理を一切使用しなくてもそれほど速くないとは思いませんでした)。ありがとうございました! :) – muffel