从内存的角度来看(在使用后删除添加的处理程序等),是WithEvents和Handles使用的优先RemoveHandler和AddHandler?
相关的Stack Overflow问题是事件处理程序和内存泄漏.
在下面的代码中,我在类的构造函数中创建一个DispatcherTimer.没有人继续参考它.
根据我的理解,在离开构造函数的范围之后,垃圾收集器应该在一段时间后回收计时器.但这不会发生!甚至在强制进行垃圾收集之后GC.Collect()
引擎盖下发生了什么?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(100),
IsEnabled = true
}
.Tick += (s, e) =>
{
textBlock1.Text = DateTime.Now.ToString();
};
}
}
Run Code Online (Sandbox Code Playgroud) 这是关于MDI设置的.net WinForm问题.
当主窗体创建MDI子窗体时,主窗体PropertyStore包含对MDI子窗体的引用.我想知道这是否会导致儿童形态即使关闭也会存活.如果是这样,处理子表格时我该怎么办才能删除此引用?
子表单由示例代码调用:
//The code is in the main form.
var f = new FormMDIChild();
f.MdiParent = this;
f.Show();
Run Code Online (Sandbox Code Playgroud) 我正在追踪某些应用程序中的内存泄漏.许多表单共享相同的拼写检查器对象,因此生活在任何单独的表单中.我知道如果没有正确删除处理程序事件,这可能是内存泄漏的原因.
AddHandler和RemoveHandler对我有意义,因为很明显如果调用了AddHandler,那么应该有一个相应的RemoveHandler.但是,Handles关键字会自动为您删除处理程序吗?
Private Sub spellingContextMenu_Popup(ByVal sender As Object, ByVal e As System.EventArgs) Handles spellingContextMenu.Popup
Run Code Online (Sandbox Code Playgroud)
在上面,如果spellingContextMenu存在很长时间但表单死了,那么应该手动删除处理程序吗?
Microsoft自己的页面没有提供有关此http://msdn.microsoft.com/en-us/library/6k46st1y.aspx#feedback的指导