У меня динамический запрос, который возвращает около 590 000 записей. Он работает успешно в первый раз, но если я запустил его снова, я продолжаю получать System.OutOfMemoryException
. Каковы некоторые причины, по которым это может произойти?Исключение типа 'System.OutOfMemoryException' было выбрано. Зачем?
Ошибка происходит здесь:
public static DataSet GetDataSet(string databaseName,string
storedProcedureName,params object[] parameters)
{
//Creates blank dataset
DataSet ds = null;
try
{
//Creates database
Database db = DatabaseFactory.CreateDatabase(databaseName);
//Creates command to execute
DbCommand dbCommand = db.GetStoredProcCommand(storedProcedureName);
dbCommand.CommandTimeout = COMMAND_TIMEOUT;
//Returns the list of SQL parameters associated with that stored proecdure
db.DiscoverParameters(dbCommand);
int i = 1;
//Loop through the list of parameters and set the values
foreach (object parameter in parameters)
{
dbCommand.Parameters[i++].Value = parameter;
}
//Retrieve dataset and set to ds
ds = db.ExecuteDataSet(dbCommand);
}
//Check for exceptions
catch (SqlException sqle)
{
throw sqle;
}
catch (Exception e)
{
throw e; // Error is thrown here.
}
//Returns dataset
return ds;
}
Вот код пробеги по нажатию кнопки:
protected void btnSearchSBIDatabase_Click(object sender, EventArgs e)
{
LicenseSearch ls = new LicenseSearch();
DataTable dtSearchResults = new DataTable();
dtSearchResults = ls.Search();
Session["dtSearchResults"] = dtSearchResults;
Response.Redirect("~/FCCSearch/SearchResults.aspx");
}
else
lblResults.Visible = true;
}
Можем ли мы увидеть код? – 2008-12-10 16:30:23
590K строк немного чрезмерно, не так ли? – StingyJack 2008-12-10 16:40:11
Проблема не в том, что вы сохраняете DataTable в сеансе, а затем при повторном запросе у вас есть как переменные сеанса, так и исходный DataTable в памяти? BTW, не называйте `throw e;`, вызовите `throw;`, поскольку в противном случае ваша трассировка стека скажет, что обработчик `catch` сгенерировал исключение, когда на самом деле это содержащий код. – 2012-05-29 12:46:07