管理CPU使用率

时间:2011-12-12 21:06:45

标签: wpf interop

每次计时器滴答时,应用程序都会继续使用额外的内存 如何在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;
    }       
}

2 个答案:

答案 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; 
}