我的一位朋友告诉我,如果你想在运行时构建可以被垃圾收集的代码,那么动态方法是唯一的方法。
我心中的一个问题是垃圾收集器如何使用反射生成的对象?
答案 0 :(得分:5)
使用反射构造的对象将像任何其他类型的对象一样被垃圾收集,例如,当它离开方法的范围时,如果它是方法变量。
答案 1 :(得分:4)
垃圾收集将收集任何.NET对象。它们使用反射创建它们没有区别。
答案 2 :(得分:1)
如何通过反射创建的对象与正常创建的对象不同?
你有一个这个对象的实例变量......运行时确切地知道它是什么类型的对象,并且也是GC。
只有创建对象的方式不同。该对象应与使用new MyObject()
答案 3 :(得分:1)
比这更复杂。 例如,搜索关于xml序列化程序泄漏内存的Tess(优秀MS员工)博客。 有一些方法可以在代码模式中解决这个问题。无论如何,GC无法修复此xml序列化程序内存泄漏问题。实际上,这些类型的动态生成的dll仅在卸载父应用程序时才会被删除(承载使用xml序列化程序的Web服务的IIS工作进程)。
底线:即使对于.Net项目,也不要依赖GC来处理所有情况。有泄漏需要解决代码/代码模式修复。
我认为这个bug仍在3.5中。
更多链接: http://plainoldstan.blogspot.com/2011/04/wcf-memory-leak-with.html 阅读Tess链接中的其他链接: Are there still known memory leaks with XMLSerialization in .Net 3.5?
答案 4 :(得分:0)
在CLR控制下运行的任何代码都是托管代码,CLR管理并决定垃圾回收。 有一些方法可以控制垃圾收集,但除非真的需要让CLR决定。