Zuishinさん
環境構築の話なんてしてないですよ。煽りすぎです。
Content-Typeでoctet-streamを付けてバイナリのダウンロードはできますよね?
papanianusさん
必然的に逼迫するリソースはストレージ
??? DBからselectした情報はストレージが持つんですか?
selectした情報はメモリのobjectに格納されてそれをCSV形式のStringにゴニョゴニョ変換します。それはメモリないで行われますよね。
全行をListやCollectionの実態で持つと行数が増えると変換前後のデータを合わせてメモリを消費しますよね? それをyieled return形式で一行のメモリだけを消費するようにしたいんです。
SurferOnWww
放置というか求めてる回答が得られないので、、、
得られない場合、自己解決もなにもできないしベストアンサーもできないので
放置はやめてと言われても。
自己解決 チャンクダウンロードをMVCで実現
C#
1public ActionResult DownloadSample()
2 {
3 var res = System.Web.HttpContext.Current.Response;
4 var fileName = "test.csv";
5 res.Headers.Add("Content-Type", "application/octet-stream");
6 res.Headers.Add("content-disposition", "attachment; filename=\"" + fileName + "\"");
7
8 foreach (var b in GetContents())
9 {
10 res.OutputStream.Write(b, 0, b.Length);
11 res.Flush();
12 }
13 res.Close();
14
15 // ビルド通すためのモックのようなもの。
16 return this.File(new byte[0], "application/octet-stream", "test.csv");
17 }
18 public IEnumerable<byte[]> GetContents()
19 {
20 // 2^10 = 1KB ^20 = 1MB
21 var item = new string('a', (int)Math.Pow(2, 20));
22
23 // 1000行 1GB
24 for (var i = 0; i < 1000; i++)
25 {
26 yield return System.Text.Encoding.UTF8.GetBytes(item + "\r\n");
27 }
28 }