在 CustomControl 中清理资源/处置

Posted

技术标签:

【中文标题】在 CustomControl 中清理资源/处置【英文标题】:Cleaning resources/disposing in CustomControl 【发布时间】:2014-07-07 21:15:17 【问题描述】:

我正在为 WinRT / WP8.1 编写自定义控件,我想知道清理资源/处置的正确方法是什么?我使用 RX(事件到 Observables),我应该手动处理它 - 但我不确定在哪里做(不强制 api 客户端手动调用 .Dispose() )?

【问题讨论】:

这里的关键是您提到您正在使用 Rx 将事件转换为可观察序列,如果您不使用 Rx,您会将事件取消注册('-=')放在自定义中控制?,我猜,但可能在 Unload 事件中。 我在自定义控件中看不到“Unload”事件之类的东西 - 如果它可用,我会在那里处理 rx observables。 好的,那么在哪里设置活动订阅? 我继承自 OnApplyTemplate() 中的控制和设置事件 那么为什么不在 OnAppylyTemplate 中为 Unloaded 事件设置事件订阅呢? 【参考方案1】:

我认为这将取决于您拥有哪些资源,并且您可以提出许多不同的策略,这些策略将更好地适用于特定场景。您可以实现IDisposable 或使用LoadedUnloaded 事件来管理资源的生命周期。一旦您可以处置它们,您可能根本不使用任何资源。您可以向控件的用户公开不同的方法或属性,以指定使用哪种策略,以便他们有选择权或明确调用它来决定何时清理。

【讨论】:

谢谢。作为 winrt xaml 工具包的开发人员,您是否有任何提示/工具可以帮助跟踪自定义控件中的内存泄漏? 查看***.com/questions/13730496/…

以上是关于在 CustomControl 中清理资源/处置的主要内容,如果未能解决你的问题,请参考以下文章

我的电脑运行VS2017 比较卡 请问大神该如何处置

MVVM-light 中的清理与处置(布尔)

自定义控制和处置

既然 .NET 有一个垃圾收集器,为啥我们需要终结器/析构器/处置模式?

电池间自燃后怎么应急处置?

消息号AC305:固定资产清理科目报错