私はリソースからsStreamResourceInfo.Stream
を取得するために使用します。使用後のストリームBitmapImage
は正しいですか?メモリプロファイラーでは、そうするとエラーが発生するため、質問します。メモリプロファイラーは、破棄されたインスタンスがGCされていないと言います。 Close
Dispose
私がウェブを見ると、私はこのトピックへのこの投稿しか見つけることができません。この投稿では、回答者は、処分することは意味がないことを述べています。しかし、状況や効果を見てみると、これは正しくないと思います。誰かが正しい行動が何であるか知っていますか?
追加情報:私が見たmsdnの例では、それらは破棄もクローズもしません。
編集
RickSladkeysの回答のおかげで、私は解決策を見つけました:私StreamResourceInfo.Stream
はのStreamSource
-propertyに割り当てBitmapImage
ます。msdnには次のように記述されています。
BitmapImageの作成後にストリームを閉じる場合は、CacheOptionプロパティをBitmapCacheOption.OnLoadに設定します。デフォルトのOnDemandキャッシュオプションは、ビットマップが必要になるまでストリームへのアクセスを保持し、クリーンアップはガベージコレクターによって処理されます。
これはBitmapImage
、ストリームの所有権を取得することを意味します。ストリームを手動で閉じる/破棄すると、メモリプロファイラーにエラーが表示されるのはそのためです。ビットマップはストリームへの参照(BitmapCacheOption OnDemand)を保持するため、BitmapImageが有効である限り、GCはストリームを解放しませんが、ストリームはすでに明示的に有効になっています。処分された。この特定の例では、廃棄は悪い考えです。
完全を期すために、msdnで、呼び出された上記のリンクの例も調べましたTextRange.Load
。の場合Load
、それは反対でLoad
あり、所有権を取得しないため、終了後にストリームを閉じる/破棄する必要があります。