以下是创建自定义C#列表并删除列表中的节点的代码:
static void Main(string[] args)
{
ListNode rootNode = CreateList();
DeleteNode(rootNode.ChildNode);
....
}
private static ListNode CreateList()
{
ListNode node1 = new ListNode()
{
Value = 1,
ParentNode = null;
}
ListNode node2 = new ListNode()
{
Value = 2,
ParentNode = node1
}
node1.ChildNode = node2;
return node1;
}
private static void DeleteNode(ListNode node2)
{
node2.ParentNode.ChildNode = null;
node2 = null;
}
我可以假设在调用DeleteNode(rootNode.ChildNode)之后,子节点(或node2)将被垃圾收集吗?
答案 0 :(得分:0)
不一定(此时可能会或可能不会启动),GC过程通常会导致性能下降,并且算法已经过优化以减少它,因此它不会为每个机会清理未引用的对象。您可以通过明确调用GC.Collect();
来强制GC,但不鼓励/不推荐,因为您可能没有考虑算法的所有考虑因素 - 所以不要这样做。
您可以阅读this 简短文章,了解该算法是如何运作的。