软件中遇到了一个内存溢出的问题,在频繁的操作中刷新界面、创建集合导致内存不够用,提示OutOfMemory。
类似代码如下,但是单独以下代码没能复现。
以下代码执行时查看内存用量,初始比较低,依次执行后大概能到1,500,000K,再次执行,过程中出现2,045,000K等情况,后面会释放内存,到100,000K只有,重复执行也不会导致内存不够用。
但是我修改的软件中确实存在问题。。。
修改方式为:
1、List<A> Ass = new List<A>(); //类变量,不在函数内声明,每次使用时情况列表,然后重新创建
2、DataGridView.DataSource如非必要不进行赋值,在原来基础上进行列表集合的增删;
使用时:if(dataGridView.DataSource as List<A> != null){ (dataGridView.DataSource as List<A>).Add(XXXXX)};
private void button5_Click(object sender, EventArgs e)
{
for (int i = 0; i < 500; i++)
{
List<A> Ass = new List<A>();
for (int j = 0; j < 10000; j++)
{
Ass.Add(new A(j));
}
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = Ass;
this.dataGridView1.DataSource = bindingSource;
}
}
internal class A
{
public string n;
public string a1;
public string a2;
public string a3;
public string a4;
public string a5;
public A(int i)
{
n = i.ToString();
a1 = (i + 1).ToString();
a2 = (i + 2).ToString();
a4 = (i + 5).ToString();
a5 = (i + 4).ToString();
a3 = (i + 3).ToString();
}
}
以上,仅供参考~


1272

被折叠的 条评论
为什么被折叠?



