メモリリークでしょうかNo.11571
SBNB さん 05/02/06 21:07
 
いつもお世話になります。V4.07を使っています。
次のところから、ProcessWaiker をダウンロードして鶴亀を調べました。
http://www001.upp.so-net.ne.jp/yamashita/

オブジェクトカウンタのハンドル数、スレッド数、USERオブジェクト、GDIオブジェ
クトが増え続けるようです。これはメモリリークなのでしょうか。

受信後にマクロを自動起動していてエディタを開いてテキストファイルを操作するだ
けで増えますし、メール一覧をダブルクリックしてメールを見ても増えて、戻らない
場合があります。最初の起動時はハンドル数が80弱ですが、そのうちに260を容易に
超えます。

以前から漢字変換のエンターの後の漢字表示の制御が戻るのが難病かかかるなど動作
がおかしくなることがありましたし、特に最近、鶴亀のエディタ中のURLをクリック
して、InternetExplorerを表示させるときにも何秒かかるときもあって調査していて
見つけました。

問題あるのか、それともまったく問題ないのか教えていただけませんか。他の方のと
ころで、同じく発生すればよいですが、発生しないとなると、何か付随した問題なの
かもしれません。たとえばIMEとかマウス関連とか。




[ ]
RE:11571 メモリリークでしょうかNo.11572
秀まるお さん 05/02/07 10:13
 
 ハンドルの数などは、実は、Windows標準のタスクマネージャでも見ることが
出来ます。「表示・列の選択...」で表示できます。

 何らかのアクションをしてハンドル数などが増加するのは、それだけでメモリ
リークという訳にはなりません。例えば特定の操作を繰り返し行うことで、その
繰り返した数に比例してハンドル数などがどんどん増えていくってことなら、そ
れはたしかにメモリリークだと思います。

 今ちょっと試しに、メールを選択した状態でEnterキーを押してそのメールを
エディタで開いてEscキーでまた閉じるという操作を繰り返してみた程度では、
ハンドル数などがどんどん増えるという状況にはなりませんでした。

 何か具体的にこういうマクロを繰り返し動作させるとダメとかってことがあれ
ば教えて欲しいです。

[ ]
RE:11572 メモリリークでしょうかNo.11573
SBNB さん 05/02/07 11:48
 
タスクマネージャでも、ハンドル数などは同じでした。
鶴亀起動時の初期には、次のような値です。(起動より少し操作した後です)

ハンドル数                           78              
スレッド数                            1              
USERオブジェクト数                  183              
GDIオブジェクト数                   259              


んで、とりあえずたった今は、

ハンドル数                          295              
スレッド数                            8              
USERオブジェクト数                  287              
GDIオブジェクト数                   379              

2ペインでメールをダブルクリックしてエディタウインドでメールを見ると、エディ
タウインドウの分だけハンドル数などが増えます。そしてエディタウインドウをゴミ
箱アイコンで消すとかなり数値が戻ります。その後1秒後くらいにハンドルが1つ減り
ます。このとき、数値が戻らないことがあります。HTMLが添付されているメールのと
きのような気もしますし、メール中のURLをクリックしてInternetExplorerを出した
後のような気もします。

マクロでテキストの編集をしているのでそれの影響もあろうかと思いますが、マクロ
も送受信も関係なくて、閲覧だけで起こっている気がします。読み込んでいるモジ
ュールなども見るとIMEとかチューチューマウスとかあるので、そっちの問題なのか
もしれない気もします。

[ ]
RE:11573 メモリリークでしょうかNo.11574
秀まるお さん 05/02/07 13:55
 
 1回や2回アクションしてそれでハンドル数が戻らないって程度のことはよく
あります。100回やってハンドルが100個増えるとか、そういうレベルの話
でないとなんともしがたい所です。

 例えば内部的な処理でよくやるんですけど、特定の処理で適当なサイズのメモ
リが必要な場合、最初に実行されるタイミングでメモりを確保し、2回目以降は、
最初に確保したメモリをそのまま使う、以後、プロセス終了時まで解放しないっ
てことがよくあります。こういう処理があちこちにあるので、例えば最初にエデ
ィタを起動したらハンドルがどっと消費されて、2回目以降は増えないとかって
ことがあります。

 タイマーを使って時間が経過したら解放するって処理もあるし、仮にアプリ
ケーションソフト側で解放しても、Windows側で高速化のためにキャッシュして
たりとか、内部はもっと複雑なケースもあると思います。

 って技術的な説明をするのもなんですが…。

 とにかく、数回やってどうのこうのって話をされても僕にはどうにもならない
ので、せめい100回くらいは繰り返したって前提で話をしていただかないと、
なんともなりません。

[ ]
RE:11574 メモリリークでしょうかNo.11598
SBNB さん 05/02/10 15:36
 
1度にいくつかメモリなどを確保するので増えて戻らなくてもおかしいとは言えない
ということは理解しました。
スレッド数が徐々に増えているのが気になりますが、とりあえず、これで終わりにし
ます。

[ ]
RE:11598 メモリリークでしょうかNo.11602
秀まるお さん 05/02/10 16:49
 
 エディタを起動すると、それを終了してもスレッドは減らないです。これは意
図してそうしています。(昔、特定かな漢字変換ソフトとの相性問題がありまし
て)

[ ]
RE:11572 これはいかがでしょうかNo.11613
n'Guin さん 05/02/14 01:19
 
秀まるお様 

いつもお世話になっております。

以前に、ATOK16の辞書が壊れる件で、お世話いただいた
n'Guin です。

> ハンドルの数などは、実は、Windows標準のタスクマネージャでも見ることが
>出来ます。「表示・列の選択...」で表示できます。
おもしろい情報をありがとうございます。

あれから、ATOK16 の辞書が壊れる件は、明確に起こっていません。
今回は、気になることがありましたので、ご報告申し上げます。

私の環境では、下記のマクロで検討してみました。
これだけ新しいメールを作ると、「ウィンドウの数が多すぎるので、これ以上、メー
ルを開くことができません」というエラーが起こります。

スレッドのほうは、15 のままになります。
しかし、ハンドルのほうは増え続けます。

私の環境では、下記のマクロを実行するたびに増え、次のように変化します。

94, 259, 339, 366, 368, 370, 372, 375, 377, 383, 385, 387, 389, 391, 393, 39
5, 397, 399, 404, 408, 414, 442, 446

全般的な設定−上級者向け−デバッグ−ATOK16で辞書ファイルが設定されていません
のエラーが出る対策を ON にすると、

// 94, 200, 298, 372, 458, 545, 631, 717, 882, 897, 975, 1061, 1194, 1244,

いずれにせよ、増え続けます。

以上、ご報告申し上げます。

Windows XP SP2 / 鶴亀 4.07 です。





//memory leak?

loaddll "TKInfo.dll";


#n = dllfunc( "MakeReply" );
insert "test1";
#n = dllfunc( "NewMail" );
insert "test2";
#n = dllfunc( "NewMail" );
insert "test3";
#n = dllfunc( "NewMail" );
insert "test4";
#n = dllfunc( "NewMail" );
insert "test5";
#n = dllfunc( "NewMail" );
insert "test6";
#n = dllfunc( "NewMail" );
insert "test7";
#n = dllfunc( "NewMail" );
insert "test8";
#n = dllfunc( "NewMail" );
insert "test9";
#n = dllfunc( "NewMail" );
insert "test10";

#n = dllfunc( "NewMail" );
insert "test11";
#n = dllfunc( "NewMail" );
insert "test12";
#n = dllfunc( "NewMail" );
insert "test13";
#n = dllfunc( "NewMail" );
insert "test14";
#n = dllfunc( "NewMail" );

closehidemaruforced 1;
closehidemaruforced 3;
closehidemaruforced 2;
closehidemaruforced 1;
closehidemaruforced 1;
closehidemaruforced 3;
closehidemaruforced 2;
closehidemaruforced 1;
closehidemaruforced 1;
closehidemaruforced 1;

closehidemaruforced 1;
closehidemaruforced 1;
closehidemaruforced 1;
quit;


[ ]
RE:11613 これはいかがでしょうかNo.11614
秀まるお さん 05/02/14 13:30
 
 テストのために、dllfunc("NewMail")とclosehidemaruforcedを繰り返すマク
ロを作ってみたら、ハンドル数うんぬん以前におかしい症状が発生してしまいま
した。

 その辺から直します。

[ ]
RE:11614 これはいかがでしょうかNo.11616
秀まるお さん 05/02/14 14:58
 
 NewMailとclosehidemaruforcedを繰り返すとしんでしまうバグは一通り直しつ
つ、それを直した後のバージョンでテストした限りでは、たしかに一時的にハン
ドル数が増えたりはしますけど、ずっと増え続けるって感じにはなりませんでし
た。

 たしかに、マクロ実行をする度にハンドル数が1つづつ増えていくような症状
は起きたんですけど、そのまましばらく鶴亀メールを普通に使っているとまたハ
ンドル数が減ったりもするし、これといった「増え続ける」って感じとは違うよ
うな気がします。

 あと、マクロ実行の度にハンドル数が「94, 200, 298, 372, …」のような極
端な増加はこちらでは確認できませんでした。そのATOK16用のオプションをONに
してもですけど。

 実は僕のマシンは、既にATOK2005を入れてしまってるので、ATOK16じゃないと
いう決定的な違いがあったりします。ATOK2005をインストールする時にATOK16を
削除してしまってまして…。

 別のマシンにATOK16をインストールしてぼちぼちテストしてみます。

[ ]
RE:11616 これはいかがでしょうかNo.11620
秀まるお さん 05/02/14 21:25
 
 WindowsXPのテストマシンにATOK16を入れてテストしたら、たしかにハンドル
数がどんどん増えて1000を超えてしまいました。

 ただ、かな漢字変換ソフトをMS IME2002に変更してテストすると、マクロ実行
の度に増えるハンドル数は2つづつに減りました。

 あと、マクロを少し改造して、「ウィンドウの数が多すぎるので、これ以上
…」のメッセージが出ないようにするとハンドル数はまったく増えなくなりまし
た。

 ということで、総合すると、

 1.ATOK16を使っているとハンドル数が増えていく。
  (たぶんATOK16側のメモリリーク)
 2.「ウィンドウの数が多すぎるので…」が出るとハンドル数が
   2つ増える。(これはたぶん鶴亀側のメモリリーク)

 ってことになると思います。後者については原因を調べて、直せそうなら直し
ます。

[ ]
RE:11620 これはいかがでしょうかNo.11631
n'Guin さん 05/02/15 23:57
 
返信が遅れ、申し訳ありません。

いろいろテストしていただき、ありがとうございました。


> 1.ATOK16を使っているとハンドル数が増えていく。
>  (たぶんATOK16側のメモリリーク)
なるほど。

> 2.「ウィンドウの数が多すぎるので…」が出るとハンドル数が
>   2つ増える。(これはたぶん鶴亀側のメモリリーク)
了解しました。

私も、いずれ、ATOK2005 にします。
いろいろサポートしてくださり、ありがとうございました。

今後とも、お世話になります。 よろしくお願いします。

[ ]