Экспорт больших объемов данных

Вот моя проблема ..

У нас есть 2 типа отчетов на нашем сайте: данные отображаются в таблице и данные мгновенно скачивается в виде отчета.

Эти отчеты могут содержать данные за несколько лет (более 1 миллиона строк), мы разрешили нашим клиентам загружать данные за определенный диапазон дат, но мы начали ограничивать время, в течение которого они могут просматривать данные, чтобы предотвратить проблемы с производительностью в наш сайт. Однако данные по-прежнему становятся довольно большими даже в небольшом диапазоне дат, теперь, когда они расширяются, и если они загружают слишком много, наша память увеличивается на несколько гигов и заканчивается память.

У меня есть вопрос: я предпочитаю не ограничивать их данные, поэтому я пытаюсь найти хорошее решение, позволяющее им скачивать столько, сколько они хотят.

Я могу ограничить то, что они видят, возвращая только данные для каждой страницы, чтобы не было проблем с производительностью, однако загрузка всегда является проблемой.

Я изучал асинхронный режим, но мне не удалось заставить его работать, так как он увеличивает объем памяти, когда я загружаю данные.

Идеи? Мысли? Предложения?

Пример кода:


// Get Data

SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da;
DataSet ds = new DataSet();

con.ConnectionString = "MyConnectionString";
con.Open();

cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "MyStoredProc";
da = new SqlDataAdapter(cmd);
da.Fill(ds);

con.Close();

StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
DataGrid dg = new DataGrid();
dg.DataSource = ds.Tables[0];
dg.DataBind();
dg.RenderControl(htw);

Response.ClearContent();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=Report.xls");
Response.Write(sw.ToString());
Response.End();

Когда я запускаю это с моими данными ... которые составляют примерно 800 тыс. Строк, у меня вспыхивает память, и я получаю ошибку нехватки памяти, что еще больше усугубляет ситуацию ... RenderControl до его завершения

5
задан icedwater 18 July 2015 в 14:09
поделиться