这是将Lambda用作EventHandler的有效方法吗?在我看来,处理程序已被正确删除,垃圾收集器应该清理它.但是,我还没有看到其他人这样做,所以我想我最好再仔细检查一下.
同样,用什么来测试这是否实际上是垃圾收集的最佳工具(最好是免费的)是什么?
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(10);
EventHandler callback = null;
callback = (s, e) =>
{
timer.Stop();
timer.Tick -= callback;
};
timer.Tick += callback;
timer.Start();
Run Code Online (Sandbox Code Playgroud)
是的,回调执行一次后就可以进行垃圾回收。这是订阅事件以便仅执行处理程序一次的合理方式。
很难证明委托将被垃圾收集 - 或者确实用于保存捕获的变量的对象callback将timer被垃圾收集,不可否认......您真的想在那里放置一个终结器(这会影响垃圾收集本身,当然),但你不能,因为它是生成的代码。
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |