2012-02-24 10 views
0

私は次の2つのコードを持っています。第1のものは、第2のものが正しく処分している間に、明示的にImageオブジェクトを処分していません。プロダクションコードでどちらを使用するかをお勧めします。イメージオブジェクトをC#で処理する場合のベストプラクティスは何ですか?

private bool SavePatientChartImage(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME, int rotationAngle) 
    { 
     bool success = false; 
     System.Drawing.Image newImage; 
     try 
     { 
      using (MemoryStream stream = new MemoryStream(ImageBytes)) 
      { 
       newImage = System.Drawing.Image.FromStream(stream); 
       switch (rotationAngle) 
       { 
        case 90: 
         newImage.RotateFlip(RotateFlipType.Rotate90FlipNone); 
         break; 
        case 180: 
         newImage.RotateFlip(RotateFlipType.Rotate180FlipNone); 
         break; 
        case 270: 
         newImage.RotateFlip(RotateFlipType.Rotate270FlipNone); 
         break; 
        default: 
         newImage = newImage; 
         break; 
       } 
       newImage.Save(Path.Combine(ImageFilePath, IMAGE_NAME)); 
       success = true; 
      } 
     } 
     catch (Exception ex) 
     { 
      success = false; 
     } 
     return success; 
    } 

private bool SavePatientChartImage(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME, int rotationAngle) 
    { 
     bool success = false; 
     System.Drawing.Image newImage; 
     try 
     { 
      using (MemoryStream stream = new MemoryStream(ImageBytes)) 
      { 
       using(newImage = System.Drawing.Image.FromStream(stream)) 
       { 
       switch (rotationAngle) 
       { 
        case 90: 
         newImage.RotateFlip(RotateFlipType.Rotate90FlipNone); 
         break; 
        case 180: 
         newImage.RotateFlip(RotateFlipType.Rotate180FlipNone); 
         break; 
        case 270: 
         newImage.RotateFlip(RotateFlipType.Rotate270FlipNone); 
         break; 
        default: 
         newImage = newImage; 
         break; 
       } 
       newImage.Save(Path.Combine(ImageFilePath, IMAGE_NAME)); 
       success = true; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      success = false; 
     } 
     return success; 
    } 

どちら宗教的に従うこと。お勧めします

+1

誰もプログラミングで宗教的なアドバイスをすることはほとんどありません。プログラミング言語のすべての機能がいくつかのユースケースに追加されています。そのユースケースに到達するたびに(まれにあるかもしれません - 例はCのGotoになります)、この機能を利用する必要があります。 –

+0

http://stackoverflow.com/a/2809026/555547こちらを参考にしてください。個人的には、それほど難しくないので、私はちょうど2回目を使用します。そして、完了したらリソースを適切に処分する必要がありますが、私は専門家ではありません。 – Jason

答えて

2

常に使い捨て可能なインスタンスをどこかに配置してください。だから後者を取る。

あなたはそれが少し読みやすくできます。

 using (MemoryStream stream = new MemoryStream(ImageBytes)) 
     using(var newImage = System.Drawing.Image.FromStream(stream)) 
     { 
     // ... 

注:これは、usingステートメント外で宣言された変数を持ってしても意味がありません。あなたは外で使うべきではありません。

関連する問題