0

ニュースアプリを Windows ストアに送信したいのですが、アプリが一時停止されたとき (OnSuspended-Event) に XmlSerializer を使用してデータを XML ファイルにシリアル化するため、常にアプリ認定プロセス (送信前のローカル チェック) に失敗します。シリアル化しないと、アプリはこの認定プロセスを正常に通過します...

ドキュメントは次のことを示唆しています。

データをシリアル化する場合、データが変更されていない場合は再シリアル化を避ける必要があります。データのシリアル化と保存に余分な時間がかかり、アプリが再びアクティブ化されたときにデータの読み取りと逆シリアル化に余分な時間がかかります。代わりに、状態が実際に変更されたかどうかをアプリで判断し、変更された場合は、変更されたデータのみをシリアル化および逆シリアル化することをお勧めします。

このアイデアはとても気に入っていますが、残念ながらそれを実現する方法がわかりません。ニュース項目 (アプリの開始時にダウンロード) のコレクションがあり、ユーザーはそれらのニュース項目の詳細をダウンロードします。したがって、基本的に中断時には、これらの詳細のみをシリアル化する必要があり、初期ロード後にニュース項目をシリアル化できます。どうすればこれを達成できますか?

ご協力ありがとうございました!

4

1 に答える 1

1

シンプルな読み取り専用データ:

  1. アプリの読み込み時に、キャッシュ ファイルが存在する場合はメモリ オブジェクトに逆シリアル化します。
  2. ユーザーの要求に応じて、サービスから更新をフェッチし、結果をマージして、すべてをすぐにシリアル化します。
  3. サスペンドでは、何もする必要はありません。更新が発生した後、データは既に保持されています。

ユーザーがいくつかの変更を加えた場合:

  1. アプリの読み込み時に、キャッシュ ファイルが存在する場合はメモリ オブジェクトに逆シリアル化します。
  2. ユーザー編集で、サービスとの間で更新し、結果をマージして、すべてをすぐにシリアル化します。
  3. サスペンドでは、何もする必要はありません。更新が発生した後、データは既に保持されています。

ここで重要なことは、サスペンド時に行うことは何もないか、ほとんど何もないということです。サスペンド イベントは、アプリに状態を保存する時間を与えることを目的としています。データを保存するためのものではありません。これは、わずかな問題で保存プロセスが失敗する可能性があり、(容赦なく) 数秒しかないため、データが失われ、アプリの見た目が悪くなるためです。

アプリの切り替えが速いため、メモリに既にあるキャッシュは変更されません。サービスからの更新またはユーザーによる変更を明示的に監視するため、メモリ内とキャッシュ ファイル内に差分があるかどうかを "判断" する必要はありません。

別の提案として、オブジェクトが巨大な場合は、オブジェクト全体を単一のファイルにシリアル化しないでください。パフォーマンス上の理由から、クラスとリストを分割して個別にシリアル化できない理由はありません。正直なところ、これは非常に一般的です。

于 2012-10-05T23:27:38.613 に答える