标准很简单。我正在使用 C# 4.0 开发一个 winform 应用程序,并且有一个带有网格视图的 win 表单。在加载事件中,我从数据库中检索数据,然后将数据源分配给 gridview。我使用 BackGroundWorker 对象进行数据库检索。这很好。我的 GUI 是响应式的。记录超过约 10 lac。所以我使用后台工作人员填充我的数据表,然后将数据表分配给gridview。问题是,我的系统变慢了。当我最小化我的应用程序的 mdi 形式并尝试做其他事情,比如打开互联网浏览器和其他东西时,我的电脑变慢了。我有核心 i3 2ith 2GB RAM。具有 10 条 lac 记录的网格使我的系统变慢。在这种情况下如何管理内存?这是代码:
BackgroundWorker bWorker; 数据表 dt;
public Form1()
{
InitializeComponent();
bWorker = new BackgroundWorker();
bWorker.DoWork += new DoWorkEventHandler(m_oWorker_DoWork);
bWorker.ProgressChanged += new ProgressChangedEventHandler(m_oWorker_ProgressChanged);
bWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(m_oWorker_RunWorkerCompleted);
bWorker.WorkerReportsProgress = true;
bWorker.WorkerSupportsCancellation = true;
}
void m_oWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dataGridView1.DataSource = dt;
pictureBox1.Visible = false;
//progressBar1.Style = ProgressBarStyle.Blocks;
//label1.Text = "Data Loaded Successfully!";
this.Hide();
this.Show();
}
void m_oWorker_DoWork(object sender, DoWorkEventArgs e)
{
dt = getDataTable();
//bWorker.ReportProgress(100);
}
void m_oWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//Here you play with the main UI thread
//progressBar1.Value = e.ProgressPercentage;
}
private void Form1_Load(object sender, EventArgs e)
{
bWorker.RunWorkerAsync();
}
private DataTable getDataTable()
{
string conStr = ConString;
SqlConnection con = new SqlConnection(conStr);
SqlCommand cmd = new SqlCommand("Select *from testtable",con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
dt = new DataTable();
try
{
da.Fill(dt);
return dt;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
}
请指导我如何管理内存,以免系统变慢。如果我在将数据表分配给网格后处理它,那会有帮助吗?
我其实是个初学者。并希望获得有关内存管理的完整指南。申请应该很快。谢谢