Exception of type 'System.OutOfMemoryException' was thrown
Есть такая функция, когда запускаю проект и вызываю эту функцию иногда вывает такую ошибку
Exception of type 'System.OutOfMemoryException' was thrown
на сервере достаточно ресурсов чтоб взять большую количество записей в данный момент в таблице 3 миллиона записей как можно решить эту проблему?
protected void btnSearch_Click(object sender, EventArgs e)
{
try
{
ASPxGridView1.Visible = true;
exportXls.Visible = true;
var conn = new OracleConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
conn.Open();
var cmd = conn.CreateCommand();
cmd.Connection = conn;
var dt = new DataTable("SENDCLIENT");
DateTime dateStart = Convert.ToDateTime(ViewStartDate.Value).Date;
DateTime dateEnd = Convert.ToDateTime(ViewEndDate.Value).Date;
cmd.CommandText = "GSB.clienta";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add("p_date_from", dateStart);
cmd.Parameters.Add("p_date_to", dateEnd);
var adapter = new OracleDataAdapter(cmd);
adapter.Fill(dt);
Session["SENDCLIENT"] = dt;
ASPxGridView1.DataSource = dt;
ASPxGridView1.DataBind();
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
}
это function GSB.clienta
create or replace function GSB.clienta(p_date_from in date, p_date_to in date) return sys_refcursor is
rc sys_refcursor;
begin
open rc for
select
t.account,
t.pname,
t.COMMENTS,
t.HRCODE
from sent_client_acc t
where trunc(t.insert_date) between p_date_from and p_date_to + 1;
return(rc);
end GSB.clienta;
Ответы (1 шт):
Соберите приложение под x64 для начала (не Any CPU), должно помочь.
И не совсем понятно, зачем высасывать из базы всю таблицу целиком в оперативку? Достаточно памяти - это сколько?
Еще вы полностью проигнорировали тот факт, что у вас используются IDisposable объекты - ссылка.
protected void btnSearch_Click(object sender, EventArgs e)
{
try
{
ASPxGridView1.Visible = true;
exportXls.Visible = true;
// IDisposable
using (var conn = new OracleConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
DateTime dateStart = Convert.ToDateTime(ViewStartDate.Value).Date;
DateTime dateEnd = Convert.ToDateTime(ViewEndDate.Value).Date;
cmd.CommandText = "GSB.clienta";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add("p_date_from", dateStart);
cmd.Parameters.Add("p_date_to", dateEnd);
var dt = new DataTable("SENDCLIENT");
// IDisposable
using (var adapter = new OracleDataAdapter(cmd))
{
adapter.Fill(dt);
}
}
Session["SENDCLIENT"] = dt;
ASPxGridView1.DataSource = dt;
ASPxGridView1.DataBind();
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
}
И еще вот это
OracleDataAdapter has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260
Если ничего из выше показанного не помогло, попробуйте вот это.