WindowsXPをずっと起動しておくと、explorer.exeのハンドルの数が5M近くなってしまいます。何が原因なのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/06/11 20:12:21
  • 終了:--

回答(5件)

id:jelly No.1

jelly回答回数22ベストアンサー獲得回数02004/06/11 20:16:40

ポイント60pt

常駐してるアプリケーションは何もないんですか?

id:gakyou

自作のアプリケーションが上げっぱなしですが、エクスプローラのハンドルを増やす原因になるのでしょうか?

2004/06/11 20:22:34
id:snitch No.2

snitch回答回数516ベストアンサー獲得回数92004/06/11 20:32:34

ポイント70pt

マイクロソフトのサポート技術情報にもハンドル リークを起こす例が多数挙げられています。

特定のAPIの使用や特定の処理を行なうとハンドル リークが起こるようです。

英語からまだ訳されていないサポート技術情報もありますので、プログラムの処理を見直されてはどうでしょうか?

id:aki73ix No.3

aki73ix回答回数5224ベストアンサー獲得回数272004/06/11 20:41:24

ポイント80pt

>常駐してるアプリケーションは何もないんですか?

何もって言うのは無理でしょう

Explorerが通信をSPYで監視していれば分かると思うのですが、他のアプリケーションの窓に変化があると随時何らかのメッセージのやり取りが起こります。

透明化などのXPのレイヤ機能を使っていると内部で、Windowハンドルを開放したり再取得したりするかもしれません。

それにしても、ハンドルの数が5Mっていうことは5000000個ですか?

それだけのハンドルが増殖するのなら、タスクマネージャーやサービスマネージャーを操作して、タスクやサービスを一時停止してみれば原因が突き止められそうな気がします

ちなみに今うちは2日起動しっぱなしのWin2000ですがexplorer.exeのメモリ使用量は5,376K、ハンドルの数は770位ですね・・・数は5Mじゃなくて5Kの間違いのような気もしますが・・・本当に5M (500万)個なんですか?

id:gakyou

はい、3週間くらいで5Mです。異常ですよねー。

2004/06/11 21:14:13
id:ataraxia No.4

ataraxia回答回数293ベストアンサー獲得回数52004/06/11 23:41:20

ポイント90pt

http://pcweb.mycom.co.jp/news/2003/06/03/23.html

Windows XPでExplorer.exeがCPUリソースを100%使用するバグが発覚 | ネット | マイコミジャーナル

ひょっとしてこれかな

id:aki73ix No.5

aki73ix回答回数5224ベストアンサー獲得回数272004/06/14 12:11:00

ポイント100pt

http://www.forest.impress.co.jp/article/2003/08/27/syu.html

窓の杜 - 【Review NEWS】ウィンドウの表示位置や大きさを数値入力で変更できる「珠[Window Manager]」

2回目の回答でなので、最後の回答になります

いろいろ考えてみましたので、確認してみてください

・Officeのファイルサーチサービスが悪さをしている(CTFMONや、FINDFASTなど)・・・聞いた話ですが、裏で検索しながら、ファイルが変更されたり追加するたびにリソースが消費されていくそうな

・何らかのアプリケーションがGetWindowTextの値が空の見えないWindowを大量に作っている(1番目のリンクのソフトで見えないWindowと見えないWINDOW名を持つ窓の検索ができます)窓の名前がないと、タスクマネージャーにも表示されないので、大量のゴーストが居る可能性があるわけです

・IISが起動していると、場合によってはハンドルのりソースリークを起こすケースがあるそうです、サービスを切ってみて改善するようならばそうなのかもしれません

・Explorerが内部でオブジェクトを大量に作っている・・・VS6などにSPYをつかってオブジェクトハンドルの一覧を見てみれば何かわかるかもしれません、自作で EnumChildWindowの一覧を表示するソフトを作って検証してみるのもいいかもしれません

500万のハンドルが3週間ほどで徐々に生成されると仮定すると20秒ほどで1つずつハンドルが増えていくことになります普通、何もしていなければハンドルの変化はそう簡単に起こりません。

1回目の回答で述べたように、まずは、ハンドルを増やすアプリケーションを突き止めることが大事です。

Explorer.exeは他のアプリケーションが窓を作成してもハンドルが増えるので、アプリケーションを順番に落としていくと増えなくなる可能性があります

よくわからなければ、ネットワークつきセーフモードで起動してみて増えるか確認してみればよいでしょう

したのリンクのFILEMONでファイルアクセスしているプログラムを見つけると、関連している場合もあります

EXPLORER.EXEのハンドル数をモニタリングするソフトならばAPIの知識で簡単に作れるので、それに増え方を時間月LOGで記録させてみて増え方の傾向がわかれば原因がもう少し絞れるかもしれませんね

以下はGDIとUSERハンドルの数を調べるサンプルです

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

lppe.dwSize=sizeof(lppe);

if(Process32First(hProcessSnap, &lppe)){

do{

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, 0, lppe.th32ProcessID);

ModuleHandles, sizeof(ModuleHandles), &ReturnSize);

if(hProcess){

if(cmplchar/*大文字小文字を区別しない比較*/(lppe.szExeFile,”explorer.exe”)<2){

RS1=GetGuiResources(hProcess,GR_GDIOBJECTS);

RS2=GetGuiResources(hProcess,GR_USEROBJECTS);

}

}

id:gakyou

やってみます。

どうもありがとうございました。

2004/06/14 12:56:44

コメントはまだありません

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

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

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

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