C# 返回内存流和内存泄漏问题
我在以下方法中处理MemoryStream时遇到问题。你能告诉我该遵循哪一条吗?为什么C# 返回内存流和内存泄漏问题,c#,asp.net,memory-leaks,memorystream,C#,Asp.net,Memory Leaks,Memorystream,我在以下方法中处理MemoryStream时遇到问题。你能告诉我该遵循哪一条吗?为什么 public MemoryStream FetchImageStream() { try { MemoryStream imageStream = new MemoryStream(); GetObjectResponse getObjectResponse = null; // This is NULL for example only u
public MemoryStream FetchImageStream()
{
try
{
MemoryStream imageStream = new MemoryStream();
GetObjectResponse getObjectResponse = null; // This is NULL for example only
using (BufferedStream bufferedStream = new BufferedStream(getObjectResponse.ResponseStream))
{
byte[] buffer = new byte[0x3000];
int count;
while ((count = bufferedStream.Read(buffer, 0, buffer.Length)) > 0)
{
imageStream.Write(buffer, 0, count); // Write the image into memory stream
}
}
}
catch (Exception ex)
{
imageStream.Dispose();
}
return imageStream;
}
=============
public void FetchImageStream(out MemoryStream imageStream)
{
try
{
imageStream = new MemoryStream();
GetObjectResponse getObjectResponse = null; // This is NULL for example only
using (BufferedStream bufferedStream = new BufferedStream(getObjectResponse.ResponseStream))
{
byte[] buffer = new byte[0x3000];
int count;
while ((count = bufferedStream.Read(buffer, 0, buffer.Length)) > 0)
{
imageStream.Write(buffer, 0, count); // Write the image into memory stream
}
}
}
catch (Exception ex)
{
imageStream.Dispose();
}
return imageStream;
}
1:这两种方式有什么不同吗。其中之一或两者都容易发生内存泄漏
2:在这两种方法中,我们是否需要在调用它们的方法中显式地处理内存流。否则可能会导致内存泄漏?如果您执行以下操作,您的运气会更好:
using (MemoryStream imageStream = new MemoryStream())
{
imageStream = FetchImageStream(imageStream);
if (imageStream != null)
{
// .... do whatever you intended to do with imageStream
}
} // this way, it'll be destroyed with it goes out of scope
public MemoryStream FetchImageStream(MemoryStream imageStream )
{
try
{
GetObjectResponse getObjectResponse = null; // This is NULL for example only
using (BufferedStream bufferedStream = new BufferedStream(getObjectResponse.ResponseStream))
{
byte[] buffer = new byte[0x3000];
int count;
while ((count = bufferedStream.Read(buffer, 0, buffer.Length)) > 0)
{
imageStream.Write(buffer, 0, count); // Write the image into memory stream
}
}
}
catch (Exception ex)
{
imageStream.Dispose();
return null;
}
return imageStream;
}
我从方法返回MemoryStream..这是主要区别。一点也不。正如链接问题
MemoryStream
s将由垃圾收集器收集,与传递byte[]
相同,如果出现异常,我还建议返回null。否则,您将返回已处理的内存流,并且无法将其与未处理的返回值区分开来。尝试对已处理的内存流执行任何操作(而不是毫无意义地重新显示它)都会导致异常