|
|
1
6
Invoke的作用类似于BeginInvoke/EndInvoke对,它将消息发布到UI线程,创建句柄,并等待该句柄来确定调用的方法何时完成。正是这个句柄在“泄漏”。您可以使用 Process Explorer 如果IASyncResult是可识别的,则处理该对象将负责清理句柄。事实并非如此,当垃圾收集器运行并调用IASyncResult对象的终结器时,句柄将被清除。您可以通过在每20次对DoStuff的调用后添加一个GC.Collect()看到这一点——句柄计数每20秒下降一次。当然,通过添加对GC.Collect()的调用来“解决”问题是最重要的 错误的 解决问题的方法;让垃圾收集器完成自己的工作。 需要 |
|
2
2
有什么原因不能在此处使用System.Windows.Forms.Timer吗?如果计时器绑定到该窗体,则您甚至不需要调用它。 |
|
|
3
2
好吧,我给它多一点时间,它看起来实际上并没有泄漏句柄,这只是垃圾收集器的不确定性质。我把它撞到了每滴答10毫秒的高度,它会爬得很快,30秒后又会掉下来。 为了证实我在每次回调时手动调用GC.Collect()的理论(不要在实际项目中这样做,这只是为了测试,有很多文章都在讨论为什么这是个坏主意),句柄计数是稳定的。 |
|
|
4
0
有趣-这不是一个答案,但根据Andrei的评论,我认为这不会以同样的方式泄漏处理,但它确实以OP提到的相同速率泄漏处理。
|
|
|
AryA Derakhshan · 在指定的时间重复循环 4 年前 |
|
|
user8105388 · If语句不与计时器一起工作 8 年前 |
|
|
Don · 无限循环崩溃,但不在更新函数中 8 年前 |
|
|
user9769106 · 绘制形状C的路径# 8 年前 |
|
|
SPlatten · MSVC 2008更好的时机? 8 年前 |