zoukankan      html  css  js  c++  java
  • 让.NET程序快速释放内存的办法

    公司里的一个程序,经过了N个人的手后发现上了生产内存会一直涨,直到物理内存几乎被占用完毕后突然就下降下来(估计是GC给释放了),然后再一直涨。这个程序主要是对字符串进行处理,困扰了我好几天,本机测试内存也有增长的趋势,但是不大明显,上生产是2、3分钟内存就上G,没找到究竟哪里的问题。
    从网上搜了些资料,看到可以让.NET立即释放内存,本地简单测试了一下,真的管用,但是没敢用,不知道对于多线程的程序,当一个线程显示释放内存时会不会影响到其他线程,而且我是做金融行业程序的,程序万一出问题就是事故,所以请教一下各位高人,这段代码是否会影响程序的稳定性?
    释放内存的代码如下:
    [DllImport("kernel32.dll")]
      public static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);

    public static void GarbageCollect()
      {
      GC.Collect();
      GC.WaitForPendingFinalizers();
      GC.Collect();
      }

      public static void FlushMemory()
      {
      GarbageCollect();

      if (Environment.OSVersion.Platform == PlatformID.Win32NT)
      {
      Win32.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
      }
      }



    NET里面还有一个类可以达到这个效果
      System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = new System.IntPtr(5);

    采用定时释放+窗体打开的时候,效果很好,估计程序占的内存会在20以下

  • 相关阅读:
    深入浅出设计模式【转载】
    将EXCEL数据入ACCESS
    SFDC中的DEBUG
    2017新开始
    js获取窗体大小
    VS2005和VS2008快捷键大全
    Office云平台性能测试人员,全国火热征集中
    JQuery设置cookie|JQuery删除cookie|JQuery获取cookie 过期
    xpath操作xml
    Aptana中的中文显示乱码问题 .
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/3913435.html
Copyright © 2011-2022 走看看