• 让.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以下

  • 相关阅读:
    hcharts实现堆叠柱形图
    程序员常用的六大技术博客类
    程序员常用的六大技术博客类
    程序员常用的六大技术博客类
    程序员常用的六大技术博客类
    前端几个常用简单的开发手册拿走不谢
    web开发快速提高工作效率的一些资源
    web开发快速提高工作效率的一些资源
    基础知识(5)- 继承
    51 NOD 1384 全排列(STL 搜索)
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/3913435.html
Copyright © 2020-2023  润新知