Я создал простой метод извлечения данных, который извлекает данные из базы данных SQL Server.
Каждый раз, когда я извлекаю данные, вызывая этот метод, объем памяти увеличивается (память пула приложений). Когда я явно вызываю GC.Collect()
после извлечения данных, память наполовину меньше, чем без GC.Collect()
.
Я знаю, что вызывать GC.Collect()
- плохая практика, но без вызова я борюсь за уменьшение памяти.
private void DataPopulate(int ID)
{
using (SqlConnection sqlCon = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["SQL"].ConnectionString))
{
sqlCon.Open();
if (sqlCon.State == ConnectionState.Open)
{
using (SqlCommand sqlCmd = new System.Data.SqlClient.SqlCommand("engine_connection_sendername_get", sqlCon) { CommandType = CommandType.StoredProcedure })
{
sqlCmd.Parameters.Add(new SqlParameter("id", ID));
using (SqlDataAdapter da = new SqlDataAdapter())
{
using (DataTable dt = new DataTable())
{
da.SelectCommand = sqlCmd;
sqlCmd.CommandTimeout = 300;
da.Fill(dt);
}
}
}
}
GC.Collect();
}
}
Я использую описанный выше метод тестирования, чтобы просто проверить проблему с памятью,Я создал образец страницы .aspx
, в которой есть только кнопка. Когда я нажимаю кнопку, этот метод вызывается. Datatable заполнен данными из базы данных SQL Server - и все.
И я проверяю память в пуле приложений. Ниже приведена сводка каждого нажатия кнопки и соответствующей памяти с использованием и без использования GC.Collect()
[