注:次の2つの質問をすでに読みました。
私はC#でコーディングしています
私は現在、GetStream()
を介してストリームを返すプライマリメソッド(myWebRequest.GetResponse().GetResponseStream()
と呼びましょう)を含むクラスをアプリケーションで構築しています。
プライマリメソッドGetStream()
は、ストリームを必要とするすべての操作(StreamReader、Bitmap()など)に使用できるStream
オブジェクトを返します。
.GetStream()
を呼び出す人に手動で破棄させることなく、最後の使用(ガベージコレクション)後にストリームを自動的に破棄する方法はありますか?
おそらくお分かりのように、私の質問は曖昧で一般的です。ストリームについての私の理解はしっかりしていないので、SOの質問が提供できるよりも、ストリームをより詳細に調べるのに役立つ記事へのリンクをいただければ幸いです。
ストリームを破棄すると、ストリームが閉じられます(おそらく、他のことはほとんど行われません)。ストリームを閉じると、ストリームがフラッシュされ、ファイルハンドルなど、ストリームに関連するすべてのリソースが解放されます。ストリームをフラッシュすると、まだ書き込まれていないバッファリングされたデータが取得され、すぐに書き出されます。一部のストリームは、ディスクファイルやネットワークパイプなどの比較的高価なリソースに大量の小さな更新を行わないようにするために、内部でバッファリングを使用します。
ほとんどのストリームでClose
またはDispose
のいずれかを呼び出す必要があります。そうしないと、ガベージコレクターが来るまで、基になるリソースが他の誰かが使用できるように解放されないため、コードが正しくありません。どれくらいの時間がかかりますか。)当然のことながら、Dispose
が推奨されます。使い捨てのものはすべてC#で廃棄することが期待されています。ほとんどのシナリオでは、おそらくFlush
を明示的に呼び出す必要はありません。
C#では、Dispose
ブロックを介してusing
を呼び出すのが慣用的です。これは、最後に破棄するtry-finallyブロックの構文糖衣です。例:
using (FileStream stream = new FileStream(path))
{
// ...
}
機能的にはと同じです
FileStream stream;
try
{
stream = new FileStream(path);
// ...
}
finally
{
if (stream != null)
stream.Dispose();
}