Stefan Wick は彼のブログで、次のようなコードを使用して WP7 の画像キャッシュをクリアできると書いています。
<code>
BitmapImage bitmapImage = image.Source as BitmapImage;
bitmapImage.UriSource = null;
image.Source = null;
http://blogs.msdn.com/b/swick/archive/2012/04/05/10151249.aspx?CommentPosted=true#commentmessage
彼の例 -- プロジェクト (ImageTips.zip) --- をテストしましたが、上記のコードは機能しないと言えます --- キャッシュされた画像のメモリを解放せず、アプリケーションのキャッシュされた画像を削除しません。
UriSource を null に設定すると -- ページ Caching.xaml のメモリのみが解放されますが、MainPage.xaml に戻ると --- メモリが解放されていないことがわかります --- メモリが増加しました!!!
Stefan のプロジェクト --- 彼のブログの ImageTips.zip を使用できることを確認するには...
私の観察を再現するには --- 次のことができます。 1. Caching.xaml ページのように現在のメモリ値を表示するコードを MainPage.xaml に追加します。
<tab>
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(500);
timer.Start();
timer.Tick += delegate
{
GC.Collect();
tbMemory.Text = string.Format("Memory: {0} bytes", DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage"));
};
</code>
- アプリケーションを実行します。初めて MainPage.xaml に移動すると、メモリの値はほぼ 9676448 バイトになります。
- クリックして Caching.xaml (画像キャッシュ) に移動します --- メモリの値はほぼ 9011200 バイトです
- [表示] ボタンをクリックして画像を表示します -- メモリの値はほぼ 12996608 バイトです
- [画像キャッシュを回避] をクリックし (キャッシュされた画像をクリアするには)、その後 [クリア] ボタンを押します --- 10090144 バイト .... 413696 バイトはどこで消えましたか ??? (10090144 - 9676448 = 413696 バイト)
[戻る] ボタンをクリックして MainPage.xaml に戻ります --- 11828248 バイト... しかし、Caching.xaml に移動する前の以前の値は 9676448 バイトでした... では、2151800 バイトがどこで消えたのでしょうか??
Caching.xaml のページに 20 回移動し ([画像を表示] をクリックしてキャッシュ付きの画像をクリア)、MainPage.xaml に戻ると --- 使用メモリは 3.3 MB に増加します... など
アプリケーションでこの問題に遭遇しましたが、解決方法がわかりません。
Windows phone 7 で画像キャッシュをクリアする他のバリアントは? または、UriSource を null に設定して画像キャッシュをクリアすると、前のページに戻るときに機能しない (メモリが解放されない) のはなぜですか?
ありがとう。