2011年3月4日金曜日

分離ストレージについてこう察

というか想像っです

WP7開発端末で分離ストレージのデータが壊れる問題について引き続き悩んでます

作っているアプリはやっぱりというかGoogleReadeerのクライアントでuGreaderのWP7版です。
分散ストレージはフォルダ情報や未読情報の他、ロード済みの記事を格納しています。

WP7ではアプリケーションの実行中に他のアプリに切り替わるとき等にApplication_Deactivatedイベントが発生して一旦稼働中のアプリは終了します。このイベント内で処理中のデータを復旧に備えて分離ストレージ上に書き出しておきます。

もとのアプリに戻ってくるときにApplication_Activatedイベントが発生するので、ここでさっき書き出したデータをロードして前の状態に戻します。


ファイルの読み書きはアプリ起動時と上記のイベント内のみで行っていますが、テスト用にボタンを押したときに書き込み、読み出し処理を行うようにしてみました。
何度か試してみましたがボタンを押したときはファイル読み書きは正常に終了します

また、いったんファイルが壊れると、その後のファイル読み書きはすべて失敗します。ストレージを一旦Removeしない限り正常動作しなくなります


つまり

  1. Application_Deactivatedイベントのストレージ書き出し中にファイルを破壊している
  2. 破壊はファイルだけでなく分離ストレージそのものを破壊してしまう。(分離ストレージの管理テーブルが壊れている?)。その後のファイル書き込みが全て失敗してしまう
想像では、

タスクの切り替え処理の時間内にファイルの書き込みが終了しないで、ファイルアクセス中にタスクが強制終了されて、ストレージの管理テーブルの不整合が起きている

と思ってます

そもそも、Application_Deactivatedイベント内での処理時間が制限されていたような?
WP7の仕様上、記事データのような大きいファイルは書き出せないのか、開発機だから書き出せないのか?わかりませんが、なるべく書き出すファイルは小さくしておくのが無難なのかもしれないです


0 件のコメント: