首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用FileStream ASPNET发送大文件500MB时出现OutOfMemoryException

关于使用 FileStream ASPNET 发送大文件 500MB 时出现 OutOfMemoryException 的问题,我们可以从以下几个方面来解决:

  1. 优化内存分配:

在处理大文件时,可以通过调整内存分配来避免内存不足的问题。可以尝试使用 GC.Collect() 方法来强制垃圾回收,以释放内存空间。

  1. 分块传输:

可以使用分块传输的方式来处理大文件,将文件分成多个较小的部分,每次只传输一部分。这可以通过设置 Response.BufferOutput 属性为 false 来实现。

  1. 使用 FileStream 类:

可以使用 FileStream 类来读取文件,并将文件的内容逐块写入响应流中。这样可以避免一次性将整个文件加载到内存中。

示例代码:

代码语言:csharp
复制
public void DownloadFile(string fileName)
{
    const int bufferSize = 1024 * 1024; // 1MB
    using (var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, bufferSize))
    {
        Response.BufferOutput = false;
        Response.ContentType = "application/octet-stream";
        Response.AppendHeader("Content-Disposition", $"attachment; filename={Path.GetFileName(fileName)}");
        var buffer = new byte[bufferSize];
        int bytesRead;
        while ((bytesRead = fileStream.Read(buffer, 0, bufferSize)) > 0)
        {
            Response.BinaryWrite(buffer);
            Response.Flush();
            Array.Clear(buffer, 0, bufferSize);
        }
    }
}
  1. 使用 HttpResponse.TransmitFile 方法:

可以使用 HttpResponse.TransmitFile 方法来处理大文件,该方法可以将文件的内容直接写入响应流中,而不需要将整个文件加载到内存中。

示例代码:

代码语言:csharp
复制
public void DownloadFile(string fileName)
{
    Response.BufferOutput = false;
    Response.ContentType = "application/octet-stream";
    Response.AppendHeader("Content-Disposition", $"attachment; filename={Path.GetFileName(fileName)}");
    Response.TransmitFile(fileName);
}

总之,处理大文件时需要注意内存分配和分块传输,以避免内存不足的问题。可以使用 FileStream 类或 HttpResponse.TransmitFile 方法来实现分块传输。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券