C# 循环引用链的对象克隆

C# 循环引用链的对象克隆,c#,clone,directed-graph,cyclic-reference,C#,Clone,Directed Graph,Cyclic Reference,我正在内存中的一个图形上运行一些操作,这些操作会修改图形本身。我需要重复这些操作若干次,随后的重复必须在新的图形副本上进行。因为图形是通过解析文件生成的,所以我不想每次重复都花时间重新解析文件,所以我一直在克隆原始图形 我的节点、边缘和图形类型都实现了可克隆,但我遇到了循环引用链的问题 节点存储来自该节点的定向边的列表Edge存储权重及其指向的节点。当两个节点共享一条双向边时,当我尝试克隆任一节点时,会得到一个StackOverflowException,因为克隆任一节点的边列表总是意味着克隆另

我正在内存中的一个图形上运行一些操作,这些操作会修改图形本身。我需要重复这些操作若干次,随后的重复必须在新的图形副本上进行。因为图形是通过解析文件生成的,所以我不想每次重复都花时间重新解析文件,所以我一直在克隆原始图形

我的
节点
边缘
图形
类型都实现了
可克隆
,但我遇到了循环引用链的问题

节点
存储来自该节点的定向
的列表
Edge
存储权重及其指向的
节点。当两个节点共享一条双向边时,当我尝试克隆任一节点时,会得到一个
StackOverflowException
,因为克隆任一节点的边列表总是意味着克隆另一个节点

出于克隆的目的,解决此循环引用的最佳方法是什么?

您确定解析是一个真正的瓶颈吗?您是否分析过一个实现,该实现每次只需重新解析,并验证解析是否表示消耗最多CPU资源的逻辑部分?