Вот моя проблема.
На нашем сайте есть два типа отчетов: данные отображаются в виде таблицы и данные мгновенно загружаются в виде отчетов.
Эти отчеты могут содержать несколько лет.данных (более 1 млн. строк), мы позволяем нашим клиентам загружать данные в соответствии с диапазоном дат, но мы начали ограничивать продолжительность просмотра данных, чтобы предотвратить проблемы с производительностью на нашем сайте.Тем не менее, данные по-прежнему становятся достаточно большими даже для небольшого диапазона дат, теперь, когда они расширяются, и если они загружают слишком много, наша память переполняется несколькими гигабайтами и исчерпывает память.
Вопрос Iесть, я скорее не ограничиваю их данные, поэтому я пытаюсь найти хорошее решение, позволяющее им загружать столько, сколько они хотят.
Я могу ограничить то, что они видят, только возвращая данные на страницу, такпроблем с производительностью нет, однако загрузка всегда является проблемой.
Я изучил асинхронный режим, но не смог заставить его работать, так как он загружает память при загрузке данных.
Идеи?Мысли?Предложения?
Пример кода:
// 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, пока не закончится