我想在网站里添加这么一个功能,就是用户可以使用Vb.net语言编写自定义处理流程,我使用的技术就是.net带的动态编译技术。功能我已经实现了,但是我在做实验的时候,发现动态编译所占用的资源没有被GC释放。如果长期运行下去,我想服务器一定会出问题的,各位有什么好方法吗?

解决方案 »

  1.   


    对象名.Dispose();
    试试
      

  2.   

    如果是object,在用完后加上 object = null;
    如果是数据连接,在用完后加上 myconn.Close();或者myconn.Dispose();
    如果每个地方都这样处理,应该不会有太多资源无法释放。不过IIS运行久了肯定得重启。就算你的站点只有html也是这样。
      

  3.   

    楼上两位的回答真让人sigh...不过我也没有什么solution。动态编译免不了耗资源,不会每次编译内存都有泄漏吧?能不能直接提供dll插件呢,省掉编译的资源?虽然给用户提供这么酷的功能,但是毕竟不是脚本了,没有去仔细了解,不知道有没有安全问题。
      

  4.   

    你可以调用GC,看效果如何?有的时候,效果还是不错的。
    另外,我觉得是不是有内存泄露了,因为.net的垃圾回收机制还是很不错的如果长期不能自动回收垃圾,我们最好检查一下自己的代码
    内存最容易发生在容器类的使用上,
      

  5.   


    using
    {
       ...;  //资源代码
    }用using块可以保证跳出块后,里面的资源马上释放
    具体请看一下VS.net帮助
      

  6.   

    1、我能够确保把所有引用类型的东东都置为nothing
    2、有网友对这种方案的评论,大家帮忙思考一下:
       a、都没考虑到内存的问题,这样反射会不断增加程序使用的内存,客户端程序也就罢了,若是用在服务器端。。嘿嘿。保准死机
       b、这样做不错,但是搂住没有考虑到一个问题,每做一次计算,就会编译出来一个Assembly,并装载在当前的AppDomain,这样随着程序的不断计算,越来越多地Assembly被装载在当前AppDomain,一个Assembly一旦被装载,除非所在的AppDomain被卸载,否则。net是不能单独卸载某个Assembly,这样使用的内存会越来越多,又不能被垃圾回收 
    3、VB.Net中如何应用using
      

  7.   

    我也觉得调用GC或者idispose接口是比较好的方法
      

  8.   

    这个问题我见过,好像有人用C#翻译的OSWorkflow就这样.
    内存老是长长长....
      

  9.   

    关注 ………………
    难道每次都编译产生新的assembly 进入了 appdomain中???

    对于底层了解的还是太少………… 
      

  10.   

    学习------------------------------------
    我的团队: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为神六喝彩,向所有科技工作者致敬!
    拒绝日货。
      

  11.   

    你可以考虑在装载每个Assembly的时候创建一个AppDomain,在这个新建的Domain里面加载Assembly,可以使用AppDomain的unload卸载这个Domain,这样在该Domain中的Assembly就会被卸载掉。--个人建议,仅供参考。