----------------------------------c#如何释放内存?----------------------------------
我来描述下背景.可能我所谓的释放跟你们想象的不太一样.
你们可能觉得Dispose下或者using下甚至GC.Collect就可以释放内存..
但是我要说的不是一回事..
一个win程序加载的时候
我们假设有100个静态的List<T> =>t,窗体中有一个全局的timers.timer=>t以及List<int>=>lx
代码也简单
看起来似乎好像大概也没什么问题..静态变量加载的时候就有值了 lx集合也判断了.
但是这个程序运行很久之后 从任务管理器中看到这个exe的内存很高 并且持续++++
甚至运行2个月之后导致内存溢出或者其他无法捕获的错误(多内存错误)
所以我如何才能让我的exe得到及时的释放?
你们可能觉得Dispose下或者using下甚至GC.Collect就可以释放内存..
但是我要说的不是一回事..
一个win程序加载的时候
我们假设有100个静态的List<T> =>t,窗体中有一个全局的timers.timer=>t以及List<int>=>lx
代码也简单
t.Elapsed += (o, e) =>
{
//可能通过一些逻辑判断从静态的list里取值并且给UI的文本框赋值
var list=static.t;
textbox1.BeginInvoke(new action(()=>{
textbox1.text=list.find(d=>d.name="小明").age;
lx.add(1);//这句我认为可能导致内存增加..所以有了下面一句
if (lx.Count >= 2000)
{
lx.RemoveRange(0, lx.Count - 2000);
}
}));
}
看起来似乎好像大概也没什么问题..静态变量加载的时候就有值了 lx集合也判断了.
但是这个程序运行很久之后 从任务管理器中看到这个exe的内存很高 并且持续++++
甚至运行2个月之后导致内存溢出或者其他无法捕获的错误(多内存错误)
所以我如何才能让我的exe得到及时的释放?
...全文
相关推荐
C#托管内存与非托管内存之间的转换的实例讲解
在本篇文章里小编给大家整理了关于C#托管内存与非托管内存之间的转换的实例以及相关知识点,需要的朋友们学习下。
c#的GC垃圾回收机制详细讲解文档
今天来谈谈C#的GC,也就是垃圾回收机制,非常的受教,总结如下 首先:谈谈托管,什么叫托管,我的理解就是托付C#运行环境帮我们去管理,在这个运行环境中可以帮助我们开辟内存和释放内存,开辟内存一般用new,内存是随机分配的,释放主要靠的是GC也就是垃圾回收机制。哪么有两个大问题 1.GC可以回收任何对象吗?2.GC什么时候来回收对象?回收那些对象?
C++程序员容易犯的十个C#错误
你是一个老程序员么?如果你是一个C++程序员,现在开始写C#了,那么一定要看这个!
C#面试笔试题目总结
对于那些想快速了解C#面试笔试题目的同学比较实用噢
语言的 using statement 与资源释放
语言的 using statement 与资源释放! 值得下载看看!资源免费,大家分享!!


