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並重新啓動循環。

客戶端將在磁盤上創建一個空白文件,從服務器請求文件,接收卡盤並將其寫入專用空間中包含的位置的文件磁盤。