2011-10-18 5 views
2

アップロードされたASP.NETのファイルは、サーバー側のコードで処理できるようになる前に、デフォルトで完全にメモリに保存されます。これは、多数の大きなファイルが同時にアップロードされた場合、サーバーのスケーラビリティに乏しいことにつながります。ASP.NETで大きなファイルをアップロードするときのサーバーメモリ使用量を削減するにはどうすればよいですか?

アップロードが完了したときだけでなく、アップロードされたデータを一時ファイルまたはデータベースに一時的に保存するサーバーコンポーネントをサーバーが読み取るときに、ファイルを読み取るための方法が理想的です。

+0

何を使用していますか? 'FileUpload'コントロール? – xanatos

+0

ASP.NETコントロールなし、純粋なマルチパート形式のHTTP POSTによるアップロード... –

答えて

0

また、複数の大きなファイルをサーバーにアップロードする必要がありました。私は結局WCFサービスを作って、ファイルをアップロードするためにSilverlightクライアントを使いました。ファイルは128kb単位でスラッシュされ、アップロードされました。このように、素敵なプログレバーを表示することもできます。もしアップロードが壊れていれば(私はパートのmd5ハッシュも送っています)、ファイル全体を再度アップロードするのではなく、簡単にアップロードすることができます。

0

あなたがここで話していることは、ストリーミングとバッファリングの違いです。

アップロードまたはダウンロードのいずれかのASP.NETアプリケーションにbyte[] buffer = ...;行がある場合、バッファリングが行われており、質問に記載されているメモリの問題が発生します。実際には、GCをリリースメモリに強制的に直接呼び出すこともできますが、絶対に記事、ブログ、人、意見があります。

ストリーミングのオプションは確かに最善の方法ですが、SQL Server 2008はFILESTREAM I/Oをネイティブにサポートし、WCFでもストリーミングを行うことができます。

WCFとSQL Serverのストリーミングに関するオンラインの記事がたくさんありますので、コードの詳細を教えずにコードを表示しないので、正確に何が必要なのかわかりません。

関連する問題