Вот моя проблема ..
У нас есть 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 до его завершения