【发布时间】:2011-01-28 08:30:46
【问题描述】:
我目前在 C dll 的包装类中使用静态委托,以避免指向不安全函数的委托被垃圾收集。
这一直很好,直到我现在需要支持该类的多个实例。一种解决方法可能是保留静态代表的列表,但我想找到一个更简单的解决方案。
【问题讨论】:
标签: c# delegates garbage-collection unsafe-pointers
我目前在 C dll 的包装类中使用静态委托,以避免指向不安全函数的委托被垃圾收集。
这一直很好,直到我现在需要支持该类的多个实例。一种解决方法可能是保留静态代表的列表,但我想找到一个更简单的解决方案。
【问题讨论】:
标签: c# delegates garbage-collection unsafe-pointers
要防止对象被收集,您必须维护对它的引用。
静态类中的静态成员在应用程序生命周期内有效。
例如班级成员,根据您的班级设计和项目设计,您可能会采取不同的方法。维护静态列表可能不是一个坏主意。
我唯一的问题是您如何能够确定代表正在被收集。因为,如果您能够访问它,那么您必须维护它的引用。在这种情况下,它一定会留在内存中。
【讨论】:
我认为你犯了一个错误:静态变量存在于应用程序的整个生命周期中,它们在应用程序运行时永远不会被 GC。
【讨论】: