Ниже приведен действительный код, который удаляет поток.Если заключено в блок using
, метод MemoryStream.Dispose()
будет вызываться автоматически при возврате.
public ActionResult CustomChart(int reportID)
{
Chart chart = new Chart();
using (var imgStream = new MemoryStream()) {
chart.SaveImage(imgStream);
imgStream.Seek(0, SeekOrigin.Begin);
return File(imgStream, "image/png");
}
}
Вы можете достичь того же результата, поместив объект в блок try
и затем вызвав Dispose
в окончательном блоке.На самом деле, согласно документации MSDN, именно так оператор using переводится компилятором.А в блоке try..finally
finally
всегда будет выполняться, даже когда try
выходит через return
.
Компилятор преобразует блок using
в следующее:
MemoryStream imgStream = new MemoryStream();
try
{
chart.SaveImage(imgStream);
imgStream.Seek(0, SeekOrigin.Begin);
return File(imgStream, "image/png");
}
finally
{
if (imgStream != null)
((IDisposable)imgStream).Dispose();
}