SQL イメージをファイルにエクスポートする際に問題が発生しています。最初にリストを初期化します。MyRecord は、GraphicName と Graphic プロパティを持つクラスです。リストを調べて MyRecord.Graphic をディスクに保存しようとすると、「System.ObjectDisposedException」タイプの最初の例外が発生します。これは、バイトをデータベースからイメージに変換するときに、MemoryStream でusingステートメントを使用したためだと思います。using文が使えず、全て動くのですが、最大6,000レコードでメモリ使用量・メモリリークが気になります。バイトを画像に変換する別の方法はありますか、またはこれを行うためのより良い設計はありますか?
... prior code
using (SqlDataReader reader = sqlCommand.ExecuteReader())
{
while (reader.Read())
{
MyRecord record = new MyRecord();
record.GraphicId = reader["GRAPHIC_ID"].ToString();
record.Graphic = !reader.IsDBNull(reader.GetOrdinal("IMAGE")) ? GetImage((byte[])reader["IMAGE"]) : null;
records.Add(record);
}
... more code
private Image GetImage(byte[] rawImage)
{
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(rawImage))
{
Image image = Image.FromStream(ms);
return image;
}
}