2011-01-17 17 views
4

Xmlを使用して、隔離されたストレージに約3,000個のオブジェクトを含むリストを保存しています。 これをデシリアライズするには時間がかかりすぎるため、スピードアップのための推奨事項があるかどうか疑問に思っていました。WP7の隔離されたストレージに大きなリストを格納

最大500個のオブジェクトをデシリアライズするのに時間がかかりますが、3000をデシリアライズするのに永久にかかります。 エミュレータ上では時間がかかり、

私は検索の全部を行い、いくつかの記事はバイナリストリームリーダーを使用すると言いましたが、私はそれを見つけることができません。私がバイナリまたはxmlで保存するかどうかは関係ありませんが、私は単にリストを永続させたいだけです。私はまだ非同期ロードを見たくない

...その多くの項目については

答えて

3

はsharpSerializerの一部であるバイナリシリアライザをチェックアウト: http://www.sharpserializer.com/en/index.html

それは非常に簡単で、非常によく動作します。

はここWP7でそれを使用して語るブログです: http://www.eugenedotnet.com/2010/12/windows-phone-7-serialization-sharpserializer/

私は同じようにそれを使用しています(この擬似コードを考慮し、eugenedotnetに記載されている機能を使用して)

App.xaml.csに:

Application_Dectivated() 
{ 
    IsolatedStorageFileStream stream = store.OpenFile(fileName, FileMode.OpenOrCreate); 
    Serialize(stream,(obj)MyHugeList<myObject>); 
} 

Application_Activated() 
{ 
    IsolatedStorageFileStream stream = store.OpenFile(fileName, FileMode.Open); 
    Deserialize(stream,(obj)MyHugeList<myObject>); 
} 
+0

非常に便利です。私はバイナリモードを使用しており、うまく動作します。 –

3

は、あなたが最適化されたシリアル化の話を構築する必要があります。私は、これを行うためにシンプルなCSVとテキスト形式を使用する多くの人がいると思う。

ビルトインシリアライザは、十分に高速ではありません。

多くの理由から、バックグラウンドスレッドでこれをすべて実行することを検討する必要がありますが、これをやりたくないことを示しています。

4
まず

、すでにここにいくつかの良い情報なので、そこに+1。

これらの記事を見直すことをお勧めします。さまざまなアウト・オブ・ボックス・シリアライズ手法を使用して、どのようなパフォーマンスが期待できるかについての良い見通しが得られます。

Windows Phone 7 Serialization: Comparison | eugenedotnet blog

WP7 Serialization Comparison

あなたがロードし、1本のヒットのすべての時間のすべてを記述する必要がない場合にも、複数のファイルを使用して検討するかもしれません。

私はJeffのアドバイスを繰り返し、ユーザーのやりとりの経験を損なわないように、後に残っている実質的な作業をバックグラウンドスレッドに取り入れることをお勧めします。

これはかなり簡単です。ここで私がよくお勧めするウォークスルーを紹介します。最近、あまりにもかなりよさそうだショーンWildermuthによって

Phạm Tiểu Giao - Threads in WP7

そしてまた、この、。

Shawn Wildermuth - Architecting WP7 - Part 9 of 10: Threading

+0

MickとJeff、あなたの助言のためにthx。とにかく、ファイルをロードして情報を表示するのを待つ必要があるため、私は実際にバックグラウンドスレッドについて心配していませんでした。これは回避策であり、実際にプロセスを高速化するものではありません。また、私は良い情報だったユージーンの(素敵な)記事を読んだ。私は他の2つのリンクをチェックします。 –

+0

非同期の前提は、待っている処理が行われている間でも、ユーザーがUIを自由に操作できることです。たとえば、バックキーを押すことができます。ポイントは、ユーザーがアプリケーションではなくナビゲーションを制御する必要があることです。このプロセスが起こっている間に使用するのに意味がないアプリの部分がある場合は、処理が完了するまで有効にされていないことがわかります。私は回避策ではないと考えていますが、改善された経験を可能にする選択肢です。 –

関連する問題