私の小さな小さなファイル転送 Web サイト ( .NET 4.5.1 を実行しているこのサイト) では、Microsoft Knowledge Base の記事812406 に従って、以前にアップロードしたファイルをサーバーからブラウザーに送信しています。
パフォーマンスの最適化を行っているときに驚いたのは、
var buffer = new byte[10000];
かなりの時間がかかります (Red Gate のANTS Performance Profilerを使用しています)。バッファーは、完全なダウンロード/クライアントごとに 1 回だけ割り当てられます。
私の質問:
- この方法でこのサイズのバッファを割り当てるのは良い習慣ですか?
- ≈10k バッファを割り当てるための代替手段はありますか?
更新 1:
あなたのコメントのおかげで、ループ内でもメモリが割り当てられていることがわかりました。
それでも、ANTS Profilerは、ループの外側の割り当てにそれだけの時間がかかるようにマークするだけで、正直なところ (まだ) 理解できません。ループ内の (無意味な) 割り当てを削除しました。
更新 2:
提案を実装しBufferManager、バッファ サイズを 10k から 4096 に減らした (念のため...) ことで、私の Web サイトは何日も前から非常にスムーズに動作しています。