Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回内存流和内存泄漏问题_C#_Asp.net_Memory Leaks_Memorystream - Fatal编程技术网

C# 返回内存流和内存泄漏问题

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

我在以下方法中处理MemoryStream时遇到问题。你能告诉我该遵循哪一条吗?为什么

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。否则,您将返回已处理的内存流,并且无法将其与未处理的返回值区分开来。尝试对已处理的内存流执行任何操作(而不是毫无意义地重新显示它)都会导致异常