日期:2014-05-17  浏览次数:20751 次

【一百分结贴】这段代码无法释放内存吗?
asp.net程序里增加了这段代码后,服务器内存不断增加,直至程序池内存超限回收!我不太懂程序,查了很久也不见效,请高手指教(替换前后的全部程序代码在这里):

WebBrowser m_WebBrowser = null; 
    private void _GenerateHtmlToImgImage()
    {
         m_WebBrowser = new WebBrowser();
         System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
         t.Enabled = false;
         t.Interval = 10000;
         t.Tick += t_Tick;
           m_WebBrowser.ScrollBarsEnabled = false;
         t.Enabled = true;
         m_WebBrowser.Navigate(m_Url);
         m_WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
                   while (m_WebBrowser != null && m_WebBrowser.ReadyState != WebBrowserReadyState.Complete)
             Application.DoEvents();
         if (m_WebBrowser != null)
             m_WebBrowser.Dispose();
                 m_WebBrowser = null;
     }
       void t_Tick(object sender, EventArgs e)
     {
         ((System.Windows.Forms.Timer)sender).Stop();
           WebBrowser tmp = m_WebBrowser;
         if (tmp != null)
         {
             m_WebBrowser = null;
             if (tmp.ReadyState != WebBrowserReadyState.Complete)
             {
                 tmp.Stop();
                 tmp.Dispose();
             }
         }


------解决方案--------------------
webbrowser相当于嵌入一个ie啦,本身如果javascript如果编写的不是很完善的话,ie会有内存泄露的。这个几乎无解。除非你能针对特定的问题做hack,相当于对造成内存泄露的脚本做patch。对于ie来说,不正确地循环引用变量,闭包变量被扩大了变量的生命周期等等很多情况下都会造成泄露。
------解决方案--------------------
webbrowser嵌入ie问题
------解决方案--------------------
你这个_GenerateHtmlToImgImage函数是不是频繁调用,或者就是在定时器时间周期内调用?看起来是要实现超时,有点晕乎。
不过这段代码看着不舒服:
WebBrowser tmp = m_WebBrowser;
         if (t