通过反射创建的对象, 应该怎样去释放呢? 代码似乎有内存泄漏,请高手看看
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
------解决方案--------------------无法说你的程序有没有什么“泄露”,就算有也不是你贴出的代码所能显示的。(比如说,你可能把一堆生命周期很短的东西,放在了一个生命周期很长的对象的事件处理程序中)
不过总的原则,就是千方百计避免反射。只有这样,才能做出又能提前在编译时发现设计问题、又容易调试、性能又基本合理的程序。除非万不得已,否则不要使用反射。
------解决方案--------------------
运行时组装(比如反射)是软件生产的一大进步,你不能因为看到滥用反射的代码就因噎废食,
我认为,应用反射会使工序更加容易测试,而且测试方式更加灵活