0

我有一个简单的VB.NET网络应用程序,允许用户下载服务器硬盘上的特定文件。但是,其中一些文件非常大,最大为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

通过一个'HttpWebRequest'来下载它? –

回答

0

这对评论部分太长,所以这是一个答案。虽然没有把任何代码..斯里。

你可能会限制传输大小为10mb可能。专门传输数据的前几个字节包含有关正在传输的文件的信息,包括开始字节,结束字节,交易ID(如果您选择这样做)等等。

服务器分析文件并确定类似的东西,在Z =(10mb-专用空间)块中发送文件所需的事务数量。 它从位置x(0)到y(Z-1)读取文件,并在专用空间中报告这些位置,将块发送到客户端,将x前进到= y + 1并重新启动循环。

客户端将在磁盘上创建一个空白文件,从服务器请求文件,接收卡盘并将其写入专用空间中包含的位置的文件磁盘。