2012-01-25 4 views
0

私はC#で書かれた小さな画像の切り抜きとサイズ変更のライブラリを見ています。これは、サイズ変更とトリミングの静的メソッドを持つ単一の静的クラスで構成されています。例えば静的クラスの静的メソッドで使用されているビットマップインスタンスを処分する必要がありますか?

作物方法:

public static Image Crop(Image img, Rectangle cropArea) 
{ 
    var bmpImage = new Bitmap(img); 
    var bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat); 
    return bmpCrop; 
} 

私は一般的に、ビットマップオブジェクトがメモリリークを防ぐために処分する必要があるが、これが原因でクラスが静的であることの別のケースであることを知っていますか?

私はこのライブラリを実装し、道路(原則として)処分の要件を変更しない静的なので

答えて

3

まず、ビットマップを使用するときは、いつでも複数のスレッドを使用したい場合は、静的クラスからそれらを使用することを警告します。一度に複数のスレッドがビットマップを使用することはできません。あなたは次の1つのスレッドでこれをしなかったのであれば、たとえば:

using(Graphics g = Graphics.FromImage(bmpCrop) 
{ 
    // do something 
} 

と別の

int w = bmpCrop.Width 

に無効なパラメータ例外が発生します。今あなたは、この機能でbmpImageを配置していない

次に、あなたの例では、私は3つの画像の場合...

  • IMG
  • 参照bmpImage
  • bmpCrop

必要とするでしょう。 この呼び出しの後、imgとbmpCropを処分するのは、ある時点で呼び出し側の責任になります

1

ダウンメモリの問題に実行したくありません。考慮する必要があるのはBitmapの後で静的メソッドが完了したかどうかです。たとえば、関数の中でBitmapを返す場合、他の誰か(他のコード)がそれを使用する必要があることを予測しているので、それを処理したくないのでそれを処分する彼の責任となる。

しかし、メソッド自体が静的であるという単なる事実は、静的ではない方法で処理した場合、静的メソッドで処理する必要があります。

関連する問題