2017-02-16 4 views
0

は、私は疑問に思って。私はWinForm、AとBにグローバルな2つのビットマップを持っているとしましょう。それぞれのイメージでいくつかの変換/ブレンド操作を行いたいが、コピーではそうしたいとします。私はこれと同様の変換関数(Bitmap Transform(Bitmap first, Bitmap second))を呼び出すことを目指し:私は、変換中にABコピーのC#のマニュアル・廃棄-of -an -IDisposableセマンティクス

var newB = Transform((Bitmap)A.Clone(), (Bitmap)B.Clone()). 

Transformで行われ、処分するのですか?呼び出しの前にコピーして、返却後に処分しますか? Transformの返品後にこれらの参照が絶対に失われているので、GCを信頼できますか?潜在的な複製用としてBELOW_-

からコメントを追加

-EDIT_は、私がその記事を見ましたが、それは呼び出し時に作成された引数を使用してのいずれかの例を欠いていました。私は渡されたオブジェクトに呼び出しスコープ内に家がないかどうか、処分する方法があった場合、処分が必要な場合、または処分を適切に処理するために家を与えなければならないかどうかを知りたがっています。私がここに集めたものでは、作成範囲内にそれらを処分する能力のない使い捨てオブジェクトを作成することはお勧めできません。 - ほとんどの組織化とクリーン証明変換の体内でクローンをやっても

また、私は、マーティンのソリューションが有効であることを確認することができます。リターンで参照されるオブジェクトとして1つを使用したので、クローンの1つだけを配置する必要がありました。最後に、画像ボックスの画像の更新が画像の読み込みビットロックになっていれば、複製が必要になりますので、クローンが必要でした。助けを求める皆様のご協力ありがとうございます。

+0

の可能性のある重複した[別のオブジェクトに渡されたときにIDisposableをオブジェクト上のDisposeを呼び出す必要がありますか?](http://stackoverflow.com/questions/4085939/who-should-call-dispose-on-idisposable-objects - 別のオブジェクトに渡されたとき) – dlatikay

+0

プロセスでこれらのビットマップがどのように損なわれる可能性があるのか​​は正確には分かりません。 Clone()はそれを保護しません。しかし、一般的に、はい、あなたがクローン()ならクローンも処分する必要があります。掲示が重大な間違いであるとして内部コードで()変換)のDisposeを(呼び出しAとBを配置するための時間である場合、またはあなたが漏れるだろう、常に、オブジェクトの所有者が誰であるかを明らかにする必要があります。本当に*本当に* Clone()を呼び出す必要があれば、それは何もしないので、Transform()内で行うべきです。そして* using *ステートメントを使用します。 –

+0

私はすぐに私のクローンの動機をブローチにして、おそらくあなたはそれが不要であることを確認できますか? アクティブピクチャボックスによってAビットマップとBビットマップが表示されています。私がTransformのビットマップをビットロックする場合は、変更を加えずに、PictureBoxの参照を無効にするか、少なくとも変換で変更が行われたときにピクチャボックスのイメージを変更する必要はありませんか?このような場合、リフレッシュを一時停止するのですか?私は、永続的なGUIのために使用しているどの変数にも厳密にバインドされたWindowsフォームオブジェクトがどれほど密接に関係しているかはわかりません。 – schulmaster

答えて

0

ガベージコレクタは自動的にオブジェクトを実装しませんIDisposable。これは、そのクラスがファイナライザをオーバーライドし、Disposeが呼び出された場合にのみ発生します。 documentation hereを参照してください。

通常最善のアプローチは、usingブロックに使い捨てのオブジェクトのインスタンスを作成することです。

using (var bitmapA = (Bitmap)A.Clone()) 
using (var bitmapB = (Bitmap)B.Clone()) 
{ 
    var newB = Transform(bitmapA, bitmapB); 
} 
+0

これは私の質問にうまく答えましたが、判明したように、私は多くの悪い習慣につながる疑問を尋ねていました。それでも受け入れます。 – schulmaster