memory-leaks - 如何识别、修复、关闭Windows Sidebar小工具中的内存泄漏?

标签 memory-leaks closures sidebar windows-desktop-gadgets

我为 Windows 边栏编写了一个小工具。这本质上意味着它是一个微型网页,可以连续运行数月。

几周后,容纳第 3 方小工具的 sidebar.exe 进程的内存使用量(工作集)达到数百兆字节。

由于没有办法识别内存泄漏的来源,我只是假设这是传闻中的 XMLHttpRequest 闭包问题。尽管就我而言,我不是异步执行的。所以我猜这只是 JAX 而不是 AJAX。

涉及网络点击的 JavaScript 函数:

function FetchXML(method, url)
{
   var xmlHttp;
   try
   {
      // Firefox, Opera 8.0+, Safari  
      xmlHttp=new XMLHttpRequest();  
   }
   catch (e)
   {  // Internet Explorer  
      try
      {
         xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");    
      }
      catch (e)
       {
         try
         {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");      
         }
         catch (e)
         {
            throw "XMLHttp not supported"
         }
      }
   }

   xmlHttp.open(method, url, false);
   xmlHttp.send(null);  
   if (xmlHttp.status != 200)
   {
      throw "Server returned status code "+xmlHttp.status.toString();
   }

   if (xmlHttp.responseXML.parseError.errorCode != 0)
   {
      throw "Error in returned XML: "+xmlHttp.responseXML.parseError.reason;
   }

   var responseXML = xmlHttp.responseXML;
   xmlHttp = null;
   return responseXML;
}

这看起来可能是内存泄漏的根源吗?


我担心如果没有真正的关闭,我就会回到原点。

最佳答案

此外,DOM 对象和 JavaScript 对象位于不同的内存空间中,因此如果您有类似的循环引用

  table = [];
  table[0] = document.getElementById('myDiv');
  table[0].ownerTable = table;

那么数组和 div 都不会被垃圾回收,即使对这两个对象的所有其他引用都超出了范围。

关于memory-leaks - 如何识别、修复、关闭Windows Sidebar小工具中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1218830/

相关文章:

c++ - 为什么不需要手动释放 vector ?

javascript - 当索引是闭包的一部分时,如何创建索引?

php - PHPDoc 中的闭包语法

rust - Blanket impl、HRTB 和 "impl"抽象返回类型 : "expected bound lifetime parameter"

php - 从页面和发布永久链接中删除侧边栏

android - 刷新消息队列以防止基于消息的泄漏。但是要刷新哪个 HandlerThread?

windows-vista - Vista/Win2008 上的临界区会泄漏内存吗?

html - 让侧边栏覆盖内容而不是将其推到一边?手机屏幕上的按钮不见了

c++ - 在单个 slot_type 上使用多个 boost::connect 的内存泄漏

ios - objective-c - viewController 上的 innerMenu,并滚动到内容