C#自定义链表节点删除 - 垃圾收集

时间:2018-02-05 05:00:52

标签: c# linked-list garbage-collection

以下是创建自定义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)将被垃圾收集吗?

1 个答案:

答案 0 :(得分:0)

不一定(此时可能会或可能不会启动),GC过程通常会导致性能下降,并且算法已经过优化以减少它,因此它不会为每个机会清理未引用的对象。您可以通过明确调用GC.Collect();来强制GC,但不鼓励/不推荐,因为您可能没有考虑算法的所有考虑因素 - 所以不要这样做。
您可以阅读this 简短文章,了解该算法是如何运作的。