2

Windows サイドバー用のガジェットを作成しました。これは本質的に、何ヶ月も続けて実行されるミニチュアの Web ページであることを意味します。

数週間後、サード パーティのガジェットを格納する sidebar.exe プロセスのメモリ使用量 (ワーキング セット) が数百メガバイトに達します。

メモリ リークの原因を特定する方法がないため、噂されている XMLHttpRequest クロージャの問題であると単純に推測します。私の場合、私は非同期で行っていませんが。だから私はそれがA JAXではなく単なるJAXだと思います。

Web ヒットに関連する 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;
}

これは、メモリ リークの原因になる可能性があるように見えますか?


実際の閉鎖がなければ、振り出しに戻ってしまうのではないかと心配しています。

4

3 に答える 3

1

また、DOM オブジェクトと JavaScript オブジェクトは異なるメモリ空間に存在するため、次のような循環参照がある場合

  テーブル = [];
  table[0] = document.getElementById('myDiv');
  テーブル [0].ownerTable = テーブル;

2 つのオブジェクトへの他のすべての参照が範囲外になったとしても、配列も div もガベージ コレクションされません。

于 2010-09-17T17:50:40.173 に答える
1

あなたの質問は古すぎて影響を受けませんが、後で偶然出くわした人にとっては...

Windows 7 64 ビット SP1 では、sidebar.exe のメモリ リークが発生しました (一部の人々は、Vista で同様の問題が発生していると報告しています)。このブログ投稿で提案されている回避策は私にとってはうまくいきました。

于 2011-09-18T07:17:35.670 に答える