Я работаю над программой, которая запрашивает локальную базу данных SQL Server.Базовая настройка - это основная форма с кнопками, которые открывают новые формы для каждой задачи.Главное окно использует около 20 МБ или памяти.Другие формы, которые используют меньше, чем это.Ничего страшного.
ИСКЛЮЧЕНИЕ:
Всякий раз, когда я открываю форму, содержащую для запуска сценария / соединений SQL, объем памяти увеличивается на 1-2 ГБ на форму.Что я не могу понять, так это то, что я не открываю соединение БД, пока не нажата кнопка.При инициализации формы соединение не открыто.Когда я нажимаю кнопку, соединение открывается, сценарий выполняется, а затем соединение закрывается, но при этом не происходит заметного изменения в использовании памяти.
Более того, память, которую мы не освобождаем, когда язакрыть или избавиться от формы.Я попытался запустить GC.collect и ничего не сделал.
Итак, мои вопросы: почему большой скачок памяти и почему он не освобождается, когда я закрываю форму.
Я новичок в кодировании, поэтому, может быть, я что-то упускаю из виду, но не могу понять.Я обратился к инструктору в моей школе, и там тоже были в тупике.Если вам нужна дополнительная информация, чтобы ответить на вопрос, пожалуйста, дайте мне знать.
Редактировать: вот код.Я знаю, что мне нужно добавить параметры, я получаю там.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace KingKit
{
public partial class DatabaseRepairForm : Form
{
public DatabaseRepairForm()
{
InitializeComponent();
}
//DBCC BUTTON
private void ResetSubmitButton_Click(object sender, EventArgs e)
{
try
{
Ux_connectionFailed.Visible = false;
//CONNECTION AND SCRIPT EXECUTION ATTEMPT
//ESTABLISH CONNECTION
string dbname = DBNameInput.Text;
string connection = "server=localhost\\King;" + "Trusted_Connection=yes;" + "Database=" + dbname + "; connection timeout=10";
SqlConnection conn = new SqlConnection(connection);
SqlCommand dbcc = new SqlCommand("dbcc checkdb(" + dbname + ") with tableresults", conn);
conn.Open();
//CONNECTION CHECK
if (conn != null && conn.State == ConnectionState.Open)
{
Ux_connectionCheck.Visible = true;
Ux_connectionLabel.Visible = true;
}
else
{
Ux_connectionLabel.Visible = true;
Ux_connectionFailed.Visible = true;
}
//CODE EXECUTION
SqlDataReader reader = dbcc.ExecuteReader();
while (reader.Read())
{
Ux_repairDisplay.Items.Add(reader["MessageText"].ToString());
}
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//EXIT BUTTON
private void Ux_appExit_Click(object sender, EventArgs e)
{
Dispose();
}
}
}