gpt4 book ai didi

c# - Winform 工具提示内存泄漏。来自 timer_tick 的自配置控制

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:02 26 4
gpt4 key购买 nike

是否有可能多次调用此函数时:

void Func(String spr, PictureBox pictureBox)
{
ToolTip toolTip = new ToolTip();
toolTip.Show(spr, pictureBox, 1000);
}

会发生内存泄漏吗?

功能完成后,工具提示是否仍然存在,甚至可能只是超出范围并自行处理?

如果第一个问题的答案是"is",创建我自己的工具提示(从 timer_tick 自行处理)是否是一个好的解决方案?

public partial class MyToolTip : ToolTip
{
public MyToolTip()
{
InitializeComponent();
timer.Interval = this.AutomaticDelay;
}

private void timer_Tick(object sender, EventArgs e)
{
this.Dispose();
}
}

如果在这种情况下这不是必需的,它是否适用于已知对象生命周期的其他情况,或者仅仅是糟糕的设计?

我选择这个解决方案是因为我希望能够同时显示许多工具提示。

最佳答案

方法执行后,ToolTip 对象仍将存在于内存中,每次调用该方法时都会创建一个新的ToolTip 实例。最好重用现有的 ToolTip。例如

 ToolTip toolTip = new ToolTip();
void Func(String spr, PictureBox pictureBox)
{

toolTip.Show(spr, pictureBox, 1000);
}

编辑 对于多个工具提示和显式处理(在 GC 之外)而不需要自定义对象,您可以尝试一些东西(有点 hacky ;)),例如:

 var toolTip= new ToolTip();
toolTip.Show(spr, pictureBox);
new System.Threading.Timer(o => tt.Dispose(), null, 1000, System.Threading.Timeout.Infinite);

虽然上面的方法可行,但重用计时器可能会更好。

关于c# - Winform 工具提示内存泄漏。来自 timer_tick 的自配置控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com