我有一个简单的VB.NET Web应用程序,允许用户下载服务器硬盘上的特定文件。但是,其中一些文件非常大,最大可达1GB。有时,当Web应用程序尝试发送这些文件时,应用程序会跳出并抛出System.OutOfMemoryException
。经过一些研究,我发现这是由于内存碎片造成的,或者没有足够的连续内存来分配整个文件。
有什么办法可以避免发生这个错误吗?我们的服务器有足够的物理内存来分配下载这些大文件,它只是一个内存碎片问题(从我在互联网上读到的东西)。
供参考,以下是当前的代码:
Public Function SendFile(ByVal fileName As String, ByVal contentType As String, ByVal fileLocation As String) As ActionResult
Dim fileBytes as Byte() = New WebClient().DownloadData(fileLocation)
Return File(fileBytes, contentType, fileName)
End Function
...其中fileName
是文件的名称,contentType
是MIME类型,fileLocation
是磁盘上的物理位置。
有什么建议吗?
答案 0 :(得分:0)
这对于评论部分来说太长了,所以它是一个答案。虽然没有输入任何代码.sry。
您可以将传输大小限制为10mb。专门用于传输数据的前几个字节,以包含有关正在传输的文件的信息,包括开始字节,结束字节,事务ID(如果您选择这样做)等。
服务器分析文件并确定在Z =(10mb - 专用空间)块中发送文件所需的事务数。 它将文件从位置x(0)读取到y(Z-1)并在专用空间中报告这些位置,将块发送到客户端,将x前进到= y + 1并重新启动循环。
客户端将在磁盘上创建一个空白文件,从服务器请求文件,接收chuck并将其写入专用空间中包含的位置的文件磁盘。