Kan*_*nan 5 .net c# dispose memorystream using
想知道以下情况是否会导致任何内存泄漏.
Aspx页面包含以下内容.
private void Generator(input)
{
using (MemoryStream memoryStream = Helper.Instance.Generate(input))
{
}
}
Run Code Online (Sandbox Code Playgroud)
从返回内存流的aspx页面调用下面的方法.
MemoryStream Generate(input)
{
MemoryStream stream = new MemoryStream();
//doing some stream manipulation here
return stream;
}
Run Code Online (Sandbox Code Playgroud)
第一点:如果代码抛出异常:
// doing some stream manipulation here
Run Code Online (Sandbox Code Playgroud)
然后MemoryStream将不会被返回Helper.Instance.Generate,因此调用者不会处理它.
第二点:MemoryStream不使用任何非托管资源,因此不必调用Dispose.
所以在这种情况下不会有内存泄漏.
Helper.Instance.Generate如果抛出异常,强制执行Dispose可能会更好:
MemoryStream Generate(input)
{
MemoryStream stream = new MemoryStream();
try
{
//doing some stream manipulation here
return stream;
}
catch
{
stream.Dispose();
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
这是构造,操作和返回IDisposable对象的方法的一般模式.
这是完全有效的,并且不会产生内存泄漏,因为 Dispose 方法是在退出 using 块后调用的。
与执行以下操作完全相同:
private void Generator(input)
{
using (MemoryStream memoryStream = new MemoryStream())
{
Helper.Instance.Manipulate(memoryStream);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7557 次 |
| 最近记录: |