我偶尔会发现自己将this
或Me
传递给子对象。比如这个浓缩的现实世界的例子......
Public Class Entity
Private mValidator as New EntityValidator()
Readonly Property IsValid()
Return mValidator.Validate(Me)
End Property
End Class
我很关心.Validate(Me)
。我没有收到警告或违反代码分析,但感觉不对。我对无限递归和垃圾收集感到紧张。
我们在项目上有内存泄漏,我想知道是否是由此造成的。我从来没有找到任何解决这个问题的资源。
这种做法是否正常,或者我的偏执是值得的?
答案 0 :(得分:3)
这本身不会导致内存泄漏,将this
传递给另一个对象并不存在任何错误。但是,我会警惕第二个对象实际上保留对传入对象的引用的情况,因为循环引用通常会导致可理解性和可维护性方面的问题。
答案 1 :(得分:1)
VB和C#中允许循环引用。引用基本上只是内存中机器WORD
大小的值。如果有一个对象A和B,并且如果A指向B和B指向A,则A内部只保存一个指向实际对象B的值,而B只有一个指向A的实际对象的值。 / p>
其他人比我更好地解释循环引用,尝试this thread, about circular references并检查第一个答案。但简而言之:不,它们不会损害您的程序,它们是允许的,有效的,甚至是普通的。
如果您想了解内存泄漏的来源,请尝试进行内存分析。