每次计时器滴答时,应用程序都会继续使用额外的内存
如何在GetActeWindowTitle()和window2中处理句柄?
我应该如何管理内存使用?
我的代码:
public partial class Window1 : Window
{
Window2 window2 ;
System.Windows.Forms.Timer timer1;
public Window1()
{
InitializeComponent();
timer1 = new Timer();
timer1.Interval = 900000;
timer1.Tick += new EventHandler(timer1Tick);
timer1.Start();
}
private void timer1Tick( object Sender, EventArgs e )
{
window2 = new window2Window();
if (((GetActeWindowTitle().IndexOf("Outlook") != -1) ||
(GetActeWindowTitle().IndexOf("Word") != -1)))
{
window2.Close();
}
else
{
window2.Show();
window2.Topmost = true;
}
}
private string GetActeWindowTitle()
{
const int nChars = 256;
IntPtr handle = IntPtr.Zero;
StringBuilder Buff = new StringBuilder(nChars);
handle = GetForegroundWindow();
if (GetWindowText(handle, Buff, nChars) > 0)
{
return Buff.ToString();
}
return null;
}
}
答案 0 :(得分:1)
可能通过释放从IntPtr中引用的Interop调用分配的内存。
在GetActeWindowTitle()中使用你的句柄后试试这个:
Marshal.FreeCoTaskMem(handle);
答案 1 :(得分:0)
为什么要创建新的window2Window才关闭它?
// window2 = new window2Window();
if (((GetActeWindowTitle().IndexOf("Outlook") != -1) ||
(GetActeWindowTitle().IndexOf("Word") != -1)))
{
// window2.Close();
}
else
{
window2 = new window2Window();
window2.Show();
window2.Topmost = true;
}