让.NET程序快速释放内存的办法

原文:让.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以下

时间: 2024-08-02 10:28:17

让.NET程序快速释放内存的办法的相关文章

Android程序退出后内存释放的问题

 做Android项目的时候发现一个问题:当应用程序退出了,点击"设置"查看应用程序,界面显示着可以点击"强制关闭". 我认为造成这样的原因是还有开启的activity没有被destroy,然后做调试,之后发现开启的activity应该是全部都被 destroy了.但是结果还是显示可以点击"强制关闭". 由于这个问题我发现了一个更加严重的问题,那就是,在我应用程序退出之后,系统并没有释放掉我应用程序所占内存. 之后在网上查解决办法.说是有两个:

快速释放Windows7系统资源避免程序无响应/系统假死等情况

电脑使用过程中难免会遇见程序失去响应,系统假死的情况,即使是表现优秀的Win7电脑也不例外.当打开或关闭某个程序让你的Win7系统已经几乎无法操作时,漫长的等待也是徒劳的,与其让它白白耗费Win7系统资源不如将其快速关闭.为了实现此目的,我们可以通过修改注册表相关键值,使失去响应的程序自动关闭,使内存中没用的DLL文件自动卸载等等,快速释放Win7系统资源. 遇见过这种情况的电脑用户都知道,每当这种时候我们的电脑基本上不能操作,所以要手动去关闭该程序可能性不大,我们让Win7系统帮忙自动关闭失去

.net程序中如何有效释放内存?

问题描述 最近我做.net项目,发现该程序并没有自动释放内存,我想知道如何在.net程序里面有效释放内存呢?或者使用什么数据结构才能有效释放内存呢?请高手指点啊! 解决方案 解决方案二:.net没有这个问题.所以没有什么数据结构可以解决你的问题,你应该看看你的程序为什么一直在使用着对象.解决方案三:.net具有自动垃圾回收机制,会在某一时刻启动帮你对垃圾回收堆的无用数据进行垃圾回收,会被认为是垃圾的对象是那些经CLR检查后认为没有任何栈中的对象或寄存器.WINDOWS句柄等非垃圾回收堆的数据所引

程序员对内存的理解(转)

在C和C++语言开发中,指针.内存一直是学习的重点.因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度最大化,同时也为bug埋下很多隐患. 因此,无论如何,我们都要对内存有一个清晰的理解. 一.对内的分配 32位操作系统支持4GB内存的连续访问,但通常把内存分为两个2GB的空间,每个进程在运行时最大可以使用2GB的私有内存(0x00000000-0x7FFFFFFF).即理论上支持如下的大数组: char szBuffer[2*1024*1024*102

快速释放Windows系统资源的小绝招

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 我们在使用电脑的过程中经常会出现程序失去响应.死机等现象.这些失去响应的程序会白白地消耗系统的资源,造成系统长时间失去响应.其实我们可以通过修改注册表相关键值,使失去响应的程序自动关闭,使内存中没用的DLL文件自动卸载等等,快速释放系统资源. 1.让系统自动关闭失去响应的应用程序 点击"开始→运行",输入regedit,打

CentOS下SWAP分区建立与释放内存的教程

方法一: 一.查看系统当前的分区情况: >free -m 二.创建用于交换分区的文件: >dd if=/dev/zero of=/whatever/swap bs=block_size (10M)count=number_of_block(3000) 三.设置交换分区文件: >mkswap /export/swap/swapfile 四.立即启用交换分区文件: >swapon /whateever/swap 五.若要想使开机时自启用,则需修改文件/etc/fstab中的swap行:

在驱动和应用程序间共享内存

在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存.两种最容易的技术是:    l 应用程序发送IOCTL给驱动程序,提供一个指向内存的指针,之后驱动程序和应用程序就可以共享内存.(应用程序分配共享内存)    l 由驱动程序分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序.(驱动程序分配共享内存)    使用IOCTL共享Buffer:    使用一个IOCT描述的Buffer,在驱动和用户程序间共享内存是内存共享最简单的实现形式.毕竟,IOCTL也

Windows 2003中巧妙释放内存资源

经常看到有朋友在论坛上诉苦说需要释放内存,其实如果你安装了 Windows 2003 的话,那么并不需要寻求那些需要注册才能长久使用的第三方内存管理软件.因为Windows 2003已经自带了一个名为Empty.exe的小程序,它可以用来释放某些应用程序在占用大量内存时不能及时释放的那部分资源,与那些第三方软件内存管理软件不同的是,Empty.exe不会强迫系统全部释放资源,而是仅仅释放必要的资源,这样就不会加重硬盘的负担了. Empty.exe的使用相当简单,命令格式如下: Empty.exe

解析PHP中的内存管理,PHP动态分配和释放内存

本篇文章是对PHP中的内存管理,PHP动态分配和释放内存进行了详细的分析介绍,需要的朋友参考下   摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改.拷贝和移动.而在C语言中,尽管你能够