zoukankan      html  css  js  c++  java
  • 关于内存溢出遇到的两种情况

    1.处理数据的程序或者服务是x86架构的,容易出现内存溢出。

    因为x86的进程,最多允许内存4g、在这4g中又有2g是操作系统等、所以当你查询的数据量非常大的时候,非常容易内存溢出。

    2.多线程 容易导致内存溢出(溢出原理细节我还不清楚)

    我查询mongo数据量,数据按地区分类,我查到A地区有70000条数据,B地区有60000条数据。我要将两地数据导出成excel,A地导出成功、B地导出报错:内存溢出。

    为什么会出现这个异常呢?

    这是因为在MongoDB中B地数据的字段比A地多很多。MongoDB对于.net的这个版本的驱动的find方法 底层用的是Dictionary 的Add来获取满足条件的数据集合。但是Dictionary是.net中线程不安全的,MongoDB的驱动可能使用了多线程查询数据、把数据插入集合中,由于B地区的数据一行特别长,插入还没结束,线程跑去插另外一条数据去了,这导致集合内部的一个计数器计算错误,记的数少了,但是插入的这个行数是不会变的,导致行数超越了集合边界,于是报内存溢出。

    参考文献:https://blog.csdn.net/liweiblog/article/details/52329740

  • 相关阅读:
    忙活了半宿,写了个小玩意
    luogu P5171 Earthquake
    luogu P1850 换教室
    luogu P2507 [SCOI2008]配对 |动态规划
    luogu P3830 [SHOI2012]随机树
    luogu P3959 宝藏
    牛客竞赛-比赛
    牛客竞赛-Who killed Cock Robin
    luogu P3807 【模板】卢卡斯定理
    牛客竞赛 -被3整除的子序列
  • 原文地址:https://www.cnblogs.com/wholeworld/p/10188216.html
Copyright © 2011-2022 走看看