データベースから特定のレコードをテキスト ファイルとしてダウンロードするアクションを作成する必要があります。以下のコードは、おもちゃの例 (少数のレコード) では問題なく動作します。このコードが本番環境にプッシュされると、メモリが不足していることが判明しました。私が扱うデータ量はGbsのオーダーです
public FileResult Streammer()
{
MemoryStream file = new MemoryStream();
using (var db = new DbMapper())
{
while (true)
{
List<Record> records = db.GetNext(10000);
if (records == null)
break;
foreach (Record r in records)
{
byte[] data = r.GetBytes();
file.Write(data, 0, data.Length);
}
}
}
file.Position = 0;
return new FileStreamResult(file, "text") { FileDownloadName = "junk.txt" };
}
理想的には、サーバー上の DB からレコードのチャンクを読み取りたいと考えています。単一のチャンクが読み取られると、すぐに変換されてクライアントにストリーミングされます。クライアントは、残りの時間/サイズを実際に示すことなく、標準のダウンロード インジケーターを表示します。
任意の推奨事項をいただければ幸いです。