次のようにページを他ウィンドウで開いた場合

<A href='http://maps.google.co.jp/' target='_blank'>Google Map</A>
<A onClick="window.open('http://maps.google.co.jp/')">Google Map</A>

開いた子ウィンドウを閉じても、メモリ消費が回復しません

Windows xp で タスクマネージャ>パフォーマンス から
物理メモリ の 利用可能 項目を比較したら

 最初  2000MB
 開く  1897MB
 閉じる 1901MB

となりました
親ウィンドウを閉じるとメモリ消費はクリアされます

この現象の回避方法(メモリ消費を回復)する方法を教えてください

当方環境
 windows XP SP2
 IE 6.0.2900.2180.xpsp_sp2_gdr.070227-2254

回答の条件
  • 1人50回まで
  • 登録:2008/10/02 14:34:36
  • 終了:2008/10/09 14:35:03

回答(3件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/10/02 15:05:02

ポイント27pt

手元にIE6が無いので現象を再現できませんが、メモリ領域を開放するフリーソフト「めもりーくりーなー」を試してみてください。

id:you_got

質問が言葉足らずですみません

使用者の立場ではなく、開発者の立場で質問しました

メモリ消費が回復するようにアプリケーションをつくりたい、という意味です

2008/10/02 15:08:11
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/10/02 21:28:17

ポイント27pt

メモリ消費が回復するようにアプリケーションをつくりたい、という意味です

分かりました。

とはいうものの、Webアプリという前提だと、あまり良い解決策が思いつきません。


同様の現象は IE7 でも起きていますが、Safari では起きませんでした。これは、ブラウザ依存の問題、というよりMicrosoft依存の問題です。

そこで、動作しているブラウザが Windows + IE(バージョンを特定する必要があると思います)なら、ActiveXでガベージコレクトを発動するという手段が考えられますが、セキュリティ上、クライアント側で拒否されると思います。とくにVistaの場合は。


結局、W3Cの勧告「Web Content Accessibility Guidelines 1.0」に従い、子ウィンドウを開けずに画面遷移させるのが正しいWebアプリの姿ではないでしょうか。

id:you_got

子ウィンドウを開けるのは今回必須なんです

そういう勧告があったとは知りませんでした

ActiveX で javascript のガベージコレクトをコールできるんですね

初耳です

できましたら具体的な方法か、参考サイトを教えてください

2008/10/03 08:56:56
id:pahoo No.3

pahoo回答回数5960ベストアンサー獲得回数6332008/10/03 11:37:21

ポイント26pt

ActiveXでガベージコレクト

you_gotさん、ardarimさん、ごめんなさい。訂正です。

できると思っていた方法でコードを書いてみたんですが、動きません。


.Net Frameworkの System.GC クラスに Collect メソッドがあるので、他の .NET と同様に JScript から

new ActiveXObject("System.GC");

で呼び出せると考えたのですが、呼び出せませんでした (m_m)。

GetTotalMemory すら呼び出せないので、GC クラスは対象外なのかもしれません。


msdn には JScript による呼び出し形式が書いてあるのですが‥‥

http://msdn.microsoft.com/ja-jp/library/system.gc.collect(VS.71).aspx


試した環境は WindowsXP(SP3) + IE7 です。

どなたか解決策をご存じでしたらヘルプお願いします。

  • id:ardarim
    id:pahooさん
    「ActiveXでガベージコレクト」って具体的にどういう方法があるのですか?
    後学のため教えてください。

  • id:ardarim
    IE上で動くJScriptと、.NET Framework上で動作するJScript.NETは似ていて非なるものです。

    JScriptは、.NET Framework上で動作しているわけではありませんので、JScript.NETで使える各種クラスは呼び出せません。ActiveXObjectで無理やり呼び出せる可能性はあるかもしれませんが、その場合でも、GC.Collectでガベージコレクトできるのは、「.NET Frameworkが管理するメモリ」だけです。

    ネイティブで動作しているIE内部のメモリは.NET Frameworkと無関係ですので全く効果はありません。

    今回問題となっているのはIE内部のヒープメモリの制御の仕方であると思われるため、これをコンテンツ側で回避するのは無理だと思われます。
  • id:you_got
    javascript の CollectGarbage というメソッドを見つけました
    Win + IE で一応コールできますが
    やはりメモリは減りません

    これは javascript のガーベッジコレクションではないでしょうか?
    やっぱり無理なんでしょうかねぇ。
  • id:pahoo
    ardarimさん、アドバイスをありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません