这会收集垃圾吗?

her*_*son 5 c# lambda

这是将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)

Jon*_*eet 3

是的,回调执行一次后就可以进行垃圾回收。这是订阅事件以便仅执行处理程序一次的合理方式。

很难证明委托将被垃圾收集 - 或者确实用于保存捕获的变量的对象callbacktimer被垃圾收集,不可否认......您真的想在那里放置一个终结器(这会影响垃圾收集本身,当然),但你不能,因为它是生成的代码。