释放资源问题 我想在网站里添加这么一个功能,就是用户可以使用Vb.net语言编写自定义处理流程,我使用的技术就是.net带的动态编译技术。功能我已经实现了,但是我在做实验的时候,发现动态编译所占用的资源没有被GC释放。如果长期运行下去,我想服务器一定会出问题的,各位有什么好方法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用对象名.Dispose();试试 如果是object,在用完后加上 object = null;如果是数据连接,在用完后加上 myconn.Close();或者myconn.Dispose();如果每个地方都这样处理,应该不会有太多资源无法释放。不过IIS运行久了肯定得重启。就算你的站点只有html也是这样。 楼上两位的回答真让人sigh...不过我也没有什么solution。动态编译免不了耗资源,不会每次编译内存都有泄漏吧?能不能直接提供dll插件呢,省掉编译的资源?虽然给用户提供这么酷的功能,但是毕竟不是脚本了,没有去仔细了解,不知道有没有安全问题。 你可以调用GC,看效果如何?有的时候,效果还是不错的。另外,我觉得是不是有内存泄露了,因为.net的垃圾回收机制还是很不错的如果长期不能自动回收垃圾,我们最好检查一下自己的代码内存最容易发生在容器类的使用上, 用using{ ...; //资源代码}用using块可以保证跳出块后,里面的资源马上释放具体请看一下VS.net帮助 1、我能够确保把所有引用类型的东东都置为nothing2、有网友对这种方案的评论,大家帮忙思考一下: a、都没考虑到内存的问题,这样反射会不断增加程序使用的内存,客户端程序也就罢了,若是用在服务器端。。嘿嘿。保准死机 b、这样做不错,但是搂住没有考虑到一个问题,每做一次计算,就会编译出来一个Assembly,并装载在当前的AppDomain,这样随着程序的不断计算,越来越多地Assembly被装载在当前AppDomain,一个Assembly一旦被装载,除非所在的AppDomain被卸载,否则。net是不能单独卸载某个Assembly,这样使用的内存会越来越多,又不能被垃圾回收 3、VB.Net中如何应用using 我也觉得调用GC或者idispose接口是比较好的方法 这个问题我见过,好像有人用C#翻译的OSWorkflow就这样.内存老是长长长.... 关注 ………………难道每次都编译产生新的assembly 进入了 appdomain中???唉对于底层了解的还是太少………… 学习------------------------------------我的团队:www.51team.com欢迎访问,有志者共谋事====CSDN 小助手 V2.0 2005年10月16日发布====CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/10/16/504620.aspx下载:http://szlawbook.com/csdnv2/csdnv2.rar为神六喝彩,向所有科技工作者致敬!拒绝日货。 你可以考虑在装载每个Assembly的时候创建一个AppDomain,在这个新建的Domain里面加载Assembly,可以使用AppDomain的unload卸载这个Domain,这样在该Domain中的Assembly就会被卸载掉。--个人建议,仅供参考。 会asp 和 会asp.net 的朋友帮帮忙 怎样在asp.net网站中运行exe文件 关于Forms验证,迷茫了。。。。 关于UpdatePanel的问题 js外部文件中使用帮定表达式 各路高手请看:做项目的时候。。。 笨问题! 做.NET快两年了,现在公司决策,把NET部门,转到JAVA部门,做JAVA去,兄弟们,给点意见,合适吗 吐血求救,javascript有实现了代码折叠的编辑器么? 关于用DataAdapter更新数据源的问题,真奇怪 datagrid 排序相关? 求购这样一个正则表达式
对象名.Dispose();
试试
如果是数据连接,在用完后加上 myconn.Close();或者myconn.Dispose();
如果每个地方都这样处理,应该不会有太多资源无法释放。不过IIS运行久了肯定得重启。就算你的站点只有html也是这样。
另外,我觉得是不是有内存泄露了,因为.net的垃圾回收机制还是很不错的如果长期不能自动回收垃圾,我们最好检查一下自己的代码
内存最容易发生在容器类的使用上,
using
{
...; //资源代码
}用using块可以保证跳出块后,里面的资源马上释放
具体请看一下VS.net帮助
2、有网友对这种方案的评论,大家帮忙思考一下:
a、都没考虑到内存的问题,这样反射会不断增加程序使用的内存,客户端程序也就罢了,若是用在服务器端。。嘿嘿。保准死机
b、这样做不错,但是搂住没有考虑到一个问题,每做一次计算,就会编译出来一个Assembly,并装载在当前的AppDomain,这样随着程序的不断计算,越来越多地Assembly被装载在当前AppDomain,一个Assembly一旦被装载,除非所在的AppDomain被卸载,否则。net是不能单独卸载某个Assembly,这样使用的内存会越来越多,又不能被垃圾回收
3、VB.Net中如何应用using
内存老是长长长....
难道每次都编译产生新的assembly 进入了 appdomain中???
唉
对于底层了解的还是太少…………
我的团队:www.51team.com
欢迎访问,有志者共谋事====CSDN 小助手 V2.0 2005年10月16日发布====
CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/10/16/504620.aspx
下载:http://szlawbook.com/csdnv2/csdnv2.rar为神六喝彩,向所有科技工作者致敬!
拒绝日货。