0

ユーザーがサーバーのハード ドライブに特定のファイルをダウンロードできるようにする単純な 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はディスク上の物理的な場所です。

助言がありますか?

4

1 に答える 1

0

おそらく転送サイズを10MBに制限できます。転送されたデータの最初の数バイトを、開始バイト、終了バイト、トランザクション ID (選択した場合) など、転送中のファイルに関する情報を格納する専用にします。

サーバーはファイルを分析し、Z=(10mb - 専用スペース) チャンクでファイルを送信するために必要なトランザクションの数などを決定します。位置 x(0) から y(Z-1) までファイルを読み取り、専用スペース内のそれらの位置を報告し、チャンクをクライアントに送信し、x を =y+1 に進め、ループを再開します。

クライアントは、ディスク上に空のファイルを作成し、サーバーからファイルを要求し、チャックを受け取り、それをファイル ディスクの専用スペースに含まれる位置に書き込みます。

于 2016-04-30T07:09:52.667 に答える