让.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以下
相关文章
- asp.net HTTP Post使用Multipart_FormData方式上传内存数据到Nexus
- [.NET控件]Telerik RadControls for ASP.NET AJAX 2008 Q1 net 2.0 Web.UI「建议收藏」
- .net 温故知新:【9】.NET日志记录 ILogger使用和原理
- .Net程序内存泄漏解析
- 使用 java.net.InterfaceAddress 获取网卡信息详解编程语言
- .net让Oracle与ASP.NET实现无缝连接(oracleasp)
- Oracle Database: The Ultimate Connection Guide for .NET Developers(net连接oracle)
- .net下的数据库连接SQLServer驱动在.NET平台下的数据库连接简明介绍(sqlserver驱动在)
- Net调用MySQL技术实践(.net 调用mysql)
- Net框架如何使用MySQL数据库(.net能用mysql吗)
- NET 对MySQL 的支持有限(.net不支持mysql)
- 分类NET 5与MySQL分类新加坡开发者技术展望(.net 5 mysql)
- Oracle Net服务重新上线,确保数据安全(oracle net重启)
- 使用Oracle64位Net突破技术极限(oracle64位net)
- ASP.NET中根据XML动态创建使用WEB组件
- Asp.net(C#)实现验证码功能代码
- asp.net生成数字和字母组合的随机数
- ASP.NET输出图片简单代码
- .net的命名空间类库的简单介绍
- 详解ASP.NET页面生命周期事件
- ASP.NET将Session保存到数据库中的方法
- 使用asp.net改变网页上图片颜色比如灰色变彩色