如何回收不用后的程序集所占用的内存空间

navyliusheng 2006-10-19 09:45:38
在我的SmartClient应用中,会有很多控件需要通过反射的方式进行加载。
现在遇到了一个很严重的问题是,在加载程序集后(Assembly),该程序
集所占用的内存空间系统不会自动释放。
我采用了这种机制:
1.新建一个AppDomain;
2.在此AppDomain中加载程序集;
3.用此程序集创建控件实例;
4.使用完毕后,UpLoad掉程序集,调用GC来强制垃圾回收;
采用这个机制,对象所占用的内存空间是可以回收的,但是程序集所占用
的内存空间还是继续占用知道应用程序结束。

各位帮我看看,给我提一下建议。

...全文
226 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
navyliusheng 2006-10-26
  • 打赏
  • 举报
回复
其实我想实现一个SmartClient的客户端插件框架,但是考虑到可能客户端应用程序长期使用,一些内存不释放的话,会造成内存占用过大,影响应用程序的运行。
不知道那位在插件框架上能给我什么建议,避免客户端的内存占用过大。
GHOSTSEA 2006-10-23
  • 打赏
  • 举报
回复
学习中
viena 2006-10-20
  • 打赏
  • 举报
回复
程序集没办法回收吧
winner2050 2006-10-20
  • 打赏
  • 举报
回复
GC.Collect();
Qim 2006-10-20
  • 打赏
  • 举报
回复
SetProcessWorkingSetSize()
很有效。
yan63 2006-10-20
  • 打赏
  • 举报
回复
gc.collect()只是将标示为空引用设置为可移除,不能确切指定什么时候释放对应的内存空间
是不是可以考虑在退出程序是卸载应用程序域:
参考:
http://developer.ccidnet.com/art/322/20021114/30763_1.html

AppDomainSetup appDomainSetup=new AppDomainSetup();//实例化域设置
appDomainSetup.LoaderOptimization=LoaderOptimization.SingleDomain; //指定域类别
AppDoman ad=AppDomain.CreateDomain(domainName,appDomainSetup); //创建域
...
//应用程序在这里运行代码
...
AppDomain.Unload(ad);//卸载域
....
要卸载进程中在运行的托管代码,只能卸载代码运行时所在的域而不能卸载单独的程序集或类型,Unload方法会正常关闭指定的域。这时,载入域的所有程序集都会被移除,并且无法再使用。

股神 2006-10-19
  • 打赏
  • 举报
回复
这个..............不懂
顶!

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧