C#中一种内存溢出问题

软件中遇到了一个内存溢出的问题,在频繁的操作中刷新界面、创建集合导致内存不够用,提示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();
            }

        }

 

以上,仅供参考~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值