日期:2014-05-17  浏览次数:21205 次

通过反射创建的对象, 应该怎样去释放呢? 代码似乎有内存泄漏,请高手看看

public static T CreateInstance<T>(Type t, object[] parms)
{
     try
     {
           object ect = Activator.CreateInstance(t, parms);
          return (T)ect;
     }
     catch
     {
          return default(T);
     }
}


程序通过这种方式, 创建了大量的对象:
object o = CreateInstance<Form>(fields[i].FieldType, null);

并在使用完以后, 执行了:
o = null;

但是通过测试发现, 内存在不断增长, 没有出现明显的下降, 从最初的80M, 一直涨到了900M以上.请大家帮忙看看应该回收

------解决方案--------------------
GC.Collect

------解决方案--------------------
无法说你的程序有没有什么“泄露”,就算有也不是你贴出的代码所能显示的。(比如说,你可能把一堆生命周期很短的东西,放在了一个生命周期很长的对象的事件处理程序中)

不过总的原则,就是千方百计避免反射。只有这样,才能做出又能提前在编译时发现设计问题、又容易调试、性能又基本合理的程序。除非万不得已,否则不要使用反射。
------解决方案--------------------
引用:
不过总的原则,就是千方百计避免反射。只有这样,才能做出又能提前在编译时发现设计问题、又容易调试、性能又基本合理的程序。除非万不得已,否则不要使用反射。

运行时组装(比如反射)是软件生产的一大进步,你不能因为看到滥用反射的代码就因噎废食,
我认为,应用反射会使工序更加容易测试,而且测试方式更加灵活