c#内存溢出异常 “System.OutOfMemoryException”类型的错误


   private void button1_Click(object sender, EventArgs e)
        {
            var count = 0;
            var smallBlocks = new List<byte[]>();
            var smallBlockSize = 90000 ;
            var largeBlockSize = 1 << 24;
            for (int i = 0; i < 5000; i++)
            {
                var bt = new byte[90000];
                smallBlocks.Add(bt); 
            }
            while (true)
            {
                
                var bigBlock = new byte[0];
                text tx = new text();
                tx.tx(smallBlockSize, largeBlockSize, smallBlocks, bigBlock, count);
                largeBlockSize++;
                smallBlockSize++;
                count++;
            }
        }
    }
    public class text
    {
        public void tx(int smallBlockSize, long largeBlockSize, List<byte[]> smallBlocks, byte[] bigBlock,int count)
        {
            try
            {
                bigBlock = new byte[largeBlockSize];
                smallBlocks[(count % 5000)] = new byte[smallBlockSize];
                GC.Collect();
            }
            catch 
            { }
        }
    }
我按照我的程序和网上查的资料做了下测试,以上的代码在我的机子上运行了213077次循环出现System.OutOfMemoryException的报错,出现报错时内存仍显示有3.6个g可用,现在的问题是我不修改数组的大小,或者说把数组拆分会变得非常麻烦.

你用自己特意设计的操作步骤立刻重现bug。不是让你坐在那里干等着bug它自己出现。

这是一个态度问题,想明白、接受这个,你才能开始调试代码问题。

将来你测试比较多了,就会明白测试跟调试的本质区别了。

测试的人是强者、他设计测试用例,他知道bug越早调出来越好。而仅仅调试的人是弱者,他祈求上苍别让bug出现。

你自己要先用心观察,然后几乎 80% 以上的概率保证你“操作几步就能把 bug 重现出来”。有个这个过程,再贴调试信息。

如果你干等着 bug,那顶多就是一个产品售后维护人员(而且是只做手工录入操作的维护人员),而不是一个开发人员。

x86 x64?报错时内存用了多少?64位系统,报错时内存用了4.3g

我这新手都看出问题了你5000*90000要多大啊,另外你每个循环都是用gc.collect没效果还占资源,最大的问题就是gc.collect调 用太多次,把这句删除,估计就恢复正常。全程没有对象close clear,你的这个gc是虾忙。你自己小蜜蜂论坛回帖机跑10000次gc.collect也会卡死

这个gc不是清除当前类的垃圾,而且清除上一次运行这个类产生的垃圾的。。。。而且大的不是5000*90000,大的是1<<24,出问题的原因不是没内存了,而是有内存但是没法放进去。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Power BI是一款用于数据分析和可视化的强大工具,但在处理大量数据或复杂计算时,可能会引发一些异常,其中之一就是“System.OutOfMemoryException异常。 当我们在Power BI中加载或处理大量数据时,可能会遇到内存不足的问题,导致系统无法为应用程序分配足够的内存空间,从而引发“System.OutOfMemoryException异常。 这种异常的出现通常是由以下原因引起的: 1. 数据量过大:当我们尝试加载和处理大量的数据时,系统的内存可能无法容纳全部数据,导致内存不足的异常。 2. 复杂的计算:如果我们在Power BI中进行复杂的计算操作,可能会消耗大量的内存资源,从而导致内存溢出。 3. 不合理的内存管理:如果我们在Power BI中使用了不合理的内存管理方法,例如频繁地创建和销毁对象,可能会造成内存碎片和内存泄漏,最终导致内存不足异常。 为了解决这个问题,我们可以尝试以下方法: 1. 减少数据量:如果我们的数据集过大,可以考虑筛选、聚合或分段加载数据,以减少内存压力。 2. 优化计算操作:优化复杂计算的算法,减少计算量,提高计算效率,从而减少内存占用。 3. 合理管理内存:在编写Power BI代码时,合理利用内存,避免不必要的内存分配和释放操作,例如使用缓存、复用对象等方法来减少内存占用。 4. 增加系统内存:如果以上方法无法解决问题,可以考虑扩大系统的内存容量,以支持更大规模的数据处理和计算操作。 总之,当我们在Power BI中遇到“System.OutOfMemoryException异常时,需要仔细分析异常引发的原因,并采取相应的优化措施来解决该问题。同时,合理规划和管理内存资源,以确保应用程序在处理大数据量和复杂计算时不会出现内存不足的异常

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值