foreach (XmlNode xmlNd in lstForm) 
                { 
                    if (xmlNd.Attributes.Item(4).Value.Trim() != "") 
                    { 
                          
                            oBaseForm = (BaseForm)System.Activator.CreateInstance(Type.GetType(xmlNd.Attributes.Item(4).Value)); 
                            oBaseForm.FormType = xmlNd.Attributes.Item(0).Value; 
                            oBaseForm.MenuID = xmlNd.Attributes.Item(2).Value; 
                            oBaseForm.IsSystemForm = bool.Parse(xmlNd.Attributes.Item(3).Value); 
                            oBaseForm.xmlCFile = xmlNd.Attributes.Item(5).Value; 
                            oBaseForm.xmlEFile = xmlNd.Attributes.Item(6).Value; 
                            oBaseForm.FormCount = 1;                             if (!htbForms.ContainsKey(oBaseForm.FormType)) 
                            { 
                                htbForms.Add(oBaseForm.FormType, oBaseForm);                               
                            } 
                            else 
                            { 
                                Message.MsgErrorInfo("FormConfigError"); 
                                return false; 
                            } 
                          
                    } 
                } 
我有这样一段程序,创建很多BaseForm子类的实例.我想在某个子类的实例不用时,释放掉.不知道如何操作? 希望高手们帮我一把,谢谢呀!

解决方案 »

  1.   

    把这种烦心事交给.Net的垃圾回收机制。
      

  2.   

    因为创建实例在程序里面会经常用到,在客户端中每次点击系统菜单(如销售订单),就需要创建一个实例,在模块关掉时理论上应该释放该实例,如果让.net自已来处理,我怕程序创建的实例太多,会有问题的。还请高人帮忙一下。
      

  3.   

    我看你的代码也没有直接牵涉到本地资源。不要怕.Net的回收机制。有了问题再说。
    垃圾回收随时都可能跟进的,包括在模块关掉前。
      

  4.   

    声明类 namespace unis;
     public class BaseForm 
    {
      private string Formtype ;
      public BaseForm
      {
      }
      public virtual void bItemClicked(ref SAPbouiCOM.ItemEvent pVal, 
                   out Boolean   BubbleEvent,SAPbouiCOM.Form oForm)
            {
                BubbleEvent = true;
            }}
    创建实例
    public BaseForm oBaseForm ;
    oBaseForm = System.Activator.CreateInstance(Type.GetType('unis.BaseForm'));
    如果这时执行oBaseForm=null,
    实例并没有被释放。用了Gc.Collect()。也没用。 如果我在整个程序中执行了10000次System.Activator.CreateInstance(Type.GetType('unis.BaseForm')),垃圾不是很多了呀?
    小弟,自己随便学了点c#.net,还请各位高人指教。
      

  5.   

    垃圾回收不是马上释放的,等到必要的时候它自然会释放。如果没有用到非托管资源(一般这种对象都实现了IDisposable接口),不用立即释放的。如果碰到了这种实现了IDisposable接口的类型,也只要调用Dispose方法释放非托管资源即可,至于托管对象则不用担心,相对于非托管资源(例如FileStream中包装的数据流),这些都是小菜,垃圾回收会负责照顾的。另外,频繁垃圾回收反而会降低性能。
      

  6.   

    把你的oBaseForm釋放就好了,與普通的對象一樣。