zoukankan      html  css  js  c++  java
  • .NET的内存限制

    之前做点云的.Net程序,经常因为数据量大出现Outofmemory异常,但是看看任务管理器,内存还有好多剩余的,在网上搜了一下发现这样的解释。

    不管系统内存多大,目前一个.NET 对象最多只能够使用2G内存。
    对于2G内存的服务器,.Net只能使用1.2G内存。
    对于4G内存的服务器,.Net可使用2.4G内存。

    但系统需要进行如下设置:
    1、 在boot.ini文件中增加/3GB的开关。
    [boot loader]
    timeout=3
    default=multi(0)disk(0)rdisk(0)partition(2)/WINNT
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(2)/WINNT="????" /3GB
    2、在命令行窗口,进入该目录,如 cd "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin"
    3、运行link命令: link -edit -LARGEADDRESSAWARE server.exe (server.exe为你的.Net程序)
    4、你的server.exe就可以使用到2.4G内存了

    然而增加这一点并没有什么卵用!更重要的是,我通过实验取得的数据和这个不一致,结果和分析如下。

    • 测试代码
      int i = 0;
                  List<double[]> buff = new List<double[]>();
                  try
                  {
                      for (i = 1; i < 1000; i++)
                      {
                          {
                              double[] a = new double[(ulong)(1024 * 1024 * 1024 / 80.0 )];
                              for (int j = 0; j < a.Length; j++)
                              {
                                  a[j] = i + j;
                              }
                              buff.Add(a);
                              Console.WriteLine((0.1 * a[0]) + "G\t" + GC.GetTotalMemory(false) / 1024 / 1024.0);
                              Console.ReadKey();
                          }
                          GC.Collect();
                      }
                  }
                  catch(Exception e)
                  {
                      Console.WriteLine(e.ToString());
                      Console.WriteLine(i * 0.1 + "G");
                  }
    • 测试结果
      0.若不对数组a赋值,在任务管理器里面是无法看到起内存使用的。
      image
      1. Win10 X64,2G可用/4G总内存,VS2015,X86/DEBUG编译,在1.4G之后出错
      imageimage
      2. Win10 X64,2.6G可用/4G总内存,VS2015,X86/DEBUG编译,在1.5G之后出错
      image
      3. Win10 X64,2.6G可用/4G总内存,VS2015,X86/DEBUG编译,同时运行2个,各自在1.4G/1.5G出错
      image
      image
      4. Win10 X64,2G可用/4G总内存,VS2015,X64/DEBUG编译,在把内存和虚拟内存耗尽前都不会出错之后出错
      image
      image
      后面其实还有内存消耗到4.3G以上的时候但是因为内存耗尽,太卡了没法截图。
    • 实验分析
      1.若不对数组进行赋值,在任务管理器里面是无法看到起内存使用的。
      2.X86模式,可使用的内存极限大概在1.4G到1.6G,而不是上述的1.2G。
      3.X64模式,在把内存和虚拟内存耗尽前都不会出错之后出错,类似于C++的new,而不是2.4G。

  • 相关阅读:
    tcp/ip协议
    soap协议
    JS引擎运行js过程
    clear:both可以清除浮动的原理(给子元素设置clear:both相当于给它自动设置了1个mrgin-top外边距从而可以撑开父盒子高度)
    BFC详解
    圣杯布局和双飞翼布局的作用和区别
    flex布局之space-evenly兼容性不好,巧用space-between实现space-evenly效果
    css巧用 transform的 rotate属性得到三角形箭头(取代iconfont的字体符号)
    li 鼠标悬停抖动问题
    小米官网首页商品列表鼠标悬停动画和阴影效果
  • 原文地址:https://www.cnblogs.com/chihirosan/p/5134414.html
Copyright © 2011-2022 走看看