タグ付けされた質問 「idisposable」

19
IDisposableインターフェイスの適切な使用
Microsoftのドキュメントを読むと、IDisposableインターフェイスの「主な」使用はアンマネージリソースのクリーンアップであることがわかります。 私にとって、「アンマネージド」とは、データベース接続、ソケット、ウィンドウハンドルなどのことを意味します。ただし、マネージリソースDispose()を解放するためにメソッドが実装されているコードを見ました。あなたのために。 例えば: public class MyCollection : IDisposable { private List<String> _theList = new List<String>(); private Dictionary<String, Point> _theDict = new Dictionary<String, Point>(); // Die, clear it up! (free unmanaged resources) public void Dispose() { _theList.clear(); _theDict.clear(); _theList = null; _theDict = null; } 私の質問は、これにより、ガベージコレクターが使用するメモリMyCollectionが、通常よりも速く解放されるのでしょうか。 編集:これまでのところ、IDisposableを使用してデータベース接続やビットマップなどのアンマネージリソースをクリーンアップする良い例がいくつか投稿されています。しかし_theList、上記のコードに100万の文字列が含まれていて、ガベージコレクターを待つのではなく、今すぐそのメモリを解放したいとします。上記のコードはそれを達成しますか?

13
C#でのFinalize / Disposeメソッドの使用
C#2008 私はしばらくこれに取り組んできましたが、コード内のfinalizeメソッドとdisposeメソッドの使用についてはまだ混乱しています。私の質問は以下の通りです: アンマネージリソースを破棄するときは、ファイナライザーのみが必要であることを知っています。ただし、アンマネージリソースを呼び出すマネージリソースがある場合でも、ファイナライザを実装する必要がありますか? ただし、アンマネージリソースを使用しないクラスを開発する場合-直接的または間接的に、IDisposableそのクラスのクライアントが「usingステートメント」を使用できるように実装する必要がありますか? クラスのクライアントがusingステートメントを使用できるようにするためだけにIDisposableを実装することは可能でしょうか? using(myClass objClass = new myClass()) { // Do stuff here } 以下のシンプルなコードを開発して、ファイナライズ/破棄の使用方法を示します。 public class NoGateway : IDisposable { private WebClient wc = null; public NoGateway() { wc = new WebClient(); wc.DownloadStringCompleted += wc_DownloadStringCompleted; } // Start the Async call to find if NoGateway is true …

12
HttpClientとHttpClientHandlerはリクエスト間で破棄する必要がありますか?
System.Net.Http.HttpClientおよびSystem.Net.Http.HttpClientHandler.NET Framework 4.5のは、IDisposableを実装します(System.Net.Http.HttpMessageInvokerを介して)。 の using声明のドキュメントは言います: 原則として、IDisposableオブジェクトを使用する場合は、usingステートメントで宣言してインスタンス化する必要があります。 この回答はこのパターンを使用しています: var baseAddress = new Uri("http://example.com"); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("foo", "bar"), …


10
Dispose()DataSetおよびDataTableを実行する必要がありますか?
DataSetとDataTableはどちらもIDisposableを実装しているため、従来のベストプラクティスでは、Dispose()メソッドを呼び出す必要があります。 ただし、これまで読んだことから、DataSetとDataTableには実際にはアンマネージリソースがないため、Dispose()は実際にはあまり機能しません。 さらに、using(DataSet myDataSet...)DataSetにはDataTablesのコレクションがあるため、単に使用することはできません。 安全のために、myDataSet.Tablesを反復処理し、各DataTableを破棄してから、DataSetを破棄する必要があります。 それで、私のすべてのDataSetsとDataTablesでDispose()を呼び出す手間は価値がありますか? 補遺: DataSetを破棄する必要があると思う人のために:Dispose()が呼び出されることを保証する必要があるため、通常、破棄のパターンはusingor を使用するtry..finallyことです。 ただし、コレクションの場合、これは非常に速く醜くなります。たとえば、Dispose()の呼び出しの1つが例外をスローした場合はどうしますか?それを飲み込んで(「悪い」)、次の要素の廃棄を続行できるようにしますか? または、myDataSet.Dispose()を呼び出して、myDataSet.TablesのDataTableを破棄することを忘れることをお勧めしますか?


5
Dispose()は、nullオブジェクトのusingステートメントで呼び出されますか?
using(潜在的に)nullオブジェクトでステートメントを使用しても安全ですか? 次の例を検討してください。 class Test { IDisposable GetObject(string name) { // returns null if not found } void DoSomething() { using (IDisposable x = GetObject("invalid name")) { if (x != null) { // etc... } } } } Disposeオブジェクトがnullでない場合にのみ呼び出されることが保証されていますNullReferenceExceptionか?
179 c#  idisposable  using 

5
ストリームオブジェクトに対してClose()またはDispose()を呼び出す必要がありますか?
以下のようなクラスStream、StreamReader、StreamWriterなどの実装IDisposableインタフェース。つまりDispose()、これらのクラスのオブジェクトでメソッドを呼び出すことができます。彼らはpublicと呼ばれるメソッドも定義しましたClose()。オブジェクトの処理が完了したら、何を呼び出せばよいのでしょうか。両方とも呼ぶとどうなりますか? 私の現在のコードはこれです: using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { using (StreamWriter writer = new StreamWriter(filename)) { int chunkSize = 1024; while (!reader.EndOfStream) { char[] buffer = new char[chunkSize]; int count = reader.Read(buffer, 0, chunkSize); if (count != 0) { writer.Write(buffer, 0, count); } } …

7
どのようにしてIDisposableがすべてのクラスに広がるのを防ぎますか?
これらの単純なクラスから始めます... 次のような単純なクラスのセットがあるとします。 class Bus { Driver busDriver = new Driver(); } class Driver { Shoe[] shoes = { new Shoe(), new Shoe() }; } class Shoe { Shoelace lace = new Shoelace(); } class Shoelace { bool tied = false; } AにBusはがありDriver、にDriverは2つShoeのがあり、それぞれにShoeがありShoelaceます。すべて非常にばかげています。 IDisposableオブジェクトをShoelaceに追加する 後で、上のいくつかの操作をShoelaceマルチスレッド化できると判断したのでEventWaitHandle、スレッドが通信するためのを追加します。したがってShoelace、次のようになります。 class Shoelace { private AutoResetEvent waitHandle …

9
ガベージコレクターはIDisposable.Disposeを呼び出しますか?
.NET IDisposableパターン は、ファイナライザを作成してIDisposableを実装する場合、ファイナライザが明示的にDisposeを呼び出す必要があることを意味します。これは論理的であり、ファイナライザーが保証されているまれな状況で私が常に行ってきたことです。 ただし、これを実行するとどうなりますか? class Foo : IDisposable { public void Dispose(){ CloseSomeHandle(); } } ファイナライザなどは実装しないでください。フレームワークはDisposeメソッドを呼び出しますか? はい、これは馬鹿げているように聞こえることに気づき、すべての論理はそれが意味をなさないことを意味しますが、私はいつも頭の後ろに2つのものを持っていて、私を不確かにしました。 数年前に誰かが実際にこれを行うと私に言ったことがあり、その人は「自分のことを知っている」という非常に確かな実績を持っています。 コンパイラー/フレームワークは、実装するインターフェース(foreach、拡張メソッド、属性に基づくシリアライゼーションなど)に応じて他の「魔法」のことを行うため、これも「魔法」である可能性があります。 私はそれについて多くのことを読みましたし、暗示されていることはたくさんありますが、この質問に対する明確な「はい」または「いいえ」の答えを見つけることはできませんでした。

5
ステートメントの使用が終了する前に戻るとどうなりますか?破棄は呼び出されますか?
私は次のコードを持っています using(MemoryStream ms = new MemoryStream()) { //code return 0; } dispose()この方法は、の終了時に呼び出されるusing文のかっこ}右?I以来 returnの終了前にusing声明、うMemoryStreamオブジェクトが適切に配置されても?そこで何が起こるの?

7
IDisposableオブジェクト参照が破棄されているかどうかをどのように判断しますか?
廃棄されたオブジェクトへの参照であるかどうかを確認する方法、またはその他の軽量な方法はありますか? PS-これは単なる好奇心です(本番コードではなく、よく眠れます)。はい、ObjectDisposedExceptionオブジェクトのメンバーにアクセスしようとすると、キャッチできることを知っています。
88 c#  .net  dispose  idisposable 

2
ASP MVC:IController Dispose()はいつ呼び出されますか?
大きなMVCアプリの1つで、大きなリファクタリング/速度の調整を行っています。数か月前から本番環境にデプロイされており、接続プールでの接続を待機するタイムアウトが発生し始めていました。接続が適切に破棄されないまで問題を追跡しました。 それを踏まえて、私はそれ以来、ベースコントローラーにこの変更を加えました。 public class MyBaseController : Controller { private ConfigurationManager configManager; // Manages the data context. public MyBaseController() { configManager = new ConfigurationManager(); } protected override void Dispose(bool disposing) { if (disposing) { if (this.configManager != null) { this.configManager.Dispose(); this.configManager = null; } } base.Dispose(disposing); } } 今、私は2つの質問があります: 競合状態を導入していますか?以来configManager管理しDataContextている公開されるIQueryable<>ビューのパラメータを、私はそれを確認する必要がありDispose()ビューが終了すると、レンダリング前にコントローラーで呼び出されることはありません。 MVCフレームワークDispose()は、ビューがレンダリングされる前または後にコントローラーを呼び出しますか?または、MVCフレームワークはそれをGarbageCollectorに任せていますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.