虚拟ICollection

时间:2017-01-05 09:40:27

标签: c# virtual icollection

在c#中 这是一种高效的编程吗?

我想知道,因为t1链接到t2和t2链接到t1因此它也链接回自身会使它占用更多空间或类似它是危险的算法/代码吗?

tiposHistorial.stream()
                .filter(x -> "specific value for CODIGO".equals(x.getCODIGO()))
                .findFirst()
                .orElse(null);

我在MVC中使用这种类型的结构。我注意到MVC还会从数据库中加载这些虚拟对象以及主要对象,所以我想知道这是否会成为问题

2 个答案:

答案 0 :(得分:1)

实例之间循环引用的主要问题是,在程序运行时,更难以推断数据结构。这导致许多代码变得更复杂,因为它需要预测和检测可能的循环引用。

因此,虽然您的代码没有任何内在错误,但您应首先考虑是否真的需要循环引用。可能还有其他更清晰的方式来表示您的数据。

答案 1 :(得分:1)

如果您需要循环引用,只需逻辑使用它们,它们就没有问题(例如,带有Children和Parent的树节点也会导致CR)。

在某些情况下,CR可能会很痛,但并不严重:

  • 序列化:默认二进制序列化可以正确处理它们,但无论您真正想要序列化的节点如何,都可能导致整个图形序列化。您可能希望使用一些自定义来避免此类问题。 XML,json和其他类型的序列化也可以考虑类似的考虑因素。
  • 垃圾收集:在从某处引用至少一个节点之前,不会释放您的对象图。如果要逐个释放对象,请确保在删除时正确地将它们解除链接,或者使它们成为一次性的,这将删除对已处置对象的每个引用。
相关问题