【问题标题】:C#: Saving a delegate from garbage collection (static no option)C#:从垃圾收集中保存委托(静态无选项)
【发布时间】:2011-01-28 08:30:46
【问题描述】:

我目前在 C dll 的包装类中使用静态委托,以避免指向不安全函数的委托被垃圾收集。
这一直很好,直到我现在需要支持该类的多个实例。一种解决方法可能是保留静态代表的列表,但我想找到一个更简单的解决方案。

【问题讨论】:

    标签: c# delegates garbage-collection unsafe-pointers


    【解决方案1】:

    要防止对象被收集,您必须维护对它的引用。

    静态类中的静态成员在应用程序生命周期内有效。

    例如班级成员,根据您的班级设计和项目设计,您可能会采取不同的方法。维护静态列表可能不是一个坏主意。

    我唯一的问题是您如何能够确定代表正在被收集。因为,如果您能够访问它,那么您必须维护它的引用。在这种情况下,它一定会留在内存中。

    【讨论】:

    • 你会看到你的应用程序崩溃导致垃圾收集;-)
    【解决方案2】:

    我认为你犯了一个错误:静态变量存在于应用程序的整个生命周期中,它们在应用程序运行时永远不会被 GC。

    【讨论】:

    • 基本上我的班级曾经是单身人士 - 所以静态已经奏效。现在我的要求是支持多个实例,因此静态不再是一个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多