私は、ユーザーがサーバーのハードドライブ上の特定のファイルをダウンロードできるようにする単純な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
は、ディスク上の物理的な場所です。
提案がありますか?
'HttpWebRequest'を介してチャンクでダウンロードしますか? –