我有一个父对象,它维护一个子对象列表。它会定期迭代子对象列表,并在每个子对象上调用DoWork方法。有时,子对象必须引用DoWork方法中的父对象。最好是存储一个指向父节点的引用,使用4个字节(右?)乘以内存子节点数,或者每次DoWork()方法时将引用传递给父节点作为参数叫什么名字?如果有任何传递额外参数的开销是多少?在这方面,MS .NET与Mono不同吗?
答案 0 :(得分:1)
当调用子例程时,堆栈帧被设置为保存在被调用方法的签名中定义的所有输入参数和局部变量,或者作为本地方法范围的实例字段。因此,无论您将其作为输入参数传递还是将其存储为本地字段,都不应该有太大的区别。
更重要的是,是否可以从父对象以外的代码调用相关方法,其中父对象可能不可用...如果是,那么您需要将引用存储为私有孩子的领域。
答案 1 :(得分:1)
要么是相同的开销,要么是最小的。
但是,如果孩子们可以与父母分离或重新连接到另一个父母,那么您将有管理孩子中存储的引用的开销。
我个人认为每次从父母那里传递'this'是最好的方式。
答案 2 :(得分:0)
平凡地说,将一个引用传递给方法而不是存储它似乎是一个更好的主意。我能想出的最好的理由是方法参数对垃圾收集器的压力要小于存储引用的压力。引用不受垃圾回收的影响,因为它会在调用堆栈退出时自动清除。另外,如果您需要传递不同的实例,则可以轻松完成。