我不确定这是否能完全解决您的问题,但这里有一些提示/技巧:
! .如果您要更新Datagridview 源,请在更新数据源之前尝试将AutoSizeColumnsMode 设置为无。这已被证明有效。
2 。有一个属性叫做DoubleBuffer。我不会深入研究它的描述,但简单来说,它会帮助你显着提高你的性能:)
static class ExtensionMethods
{
public void DoubleBuffered(DataGridView dgv, bool setting)
{
Type dgvType = dgv.GetType();
PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
pi.SetValue(dgv, setting, null);
}
}
ExtensionMethods.DoubleBuffered(mydgvw, True);
3 .最后但同样重要的是,当在 dgvw 中显示来自数据源的数据时,有时使用 ObserveableCollection 之类的集合会很有帮助,或者如果可能,尝试通过过滤减少显示的数据量。
4 .在DataAdapter 上使用DataReader 明显更快。创建一个类来管理您的数据,使用DataReader 而不是DataAdapter/DataTable。例如
public class Employees
{
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
}
///create an array
ArrayList myData = new ArrayList();
///Now,let ur datareader do the job for you .
while (reader.Read())
{
Employees emp = new Employees();
emp.Id = (int)reader[0];
emp.Name = reader[1].ToString();
emp.Age = (int)reader[2];
myData.Add(m);
}
dataGridView1.DataSource = myData;
4 .另一个最好的选择是,如果你使用Datareader 并按照上面的代码,确保在主窗体加载时在后台运行它,然后在按钮点击时,只需将dataGridView.DataSource 设置为数组......
这些是基础知识,但希望它们对您有所帮助:)