マクロでddeinitiateが遅いことがあるNo.39183
K'zawa さん 10/09/15 11:46
 
秀まるおさん、こんにちは。
K'zawaです。

秀丸メール本体で下記の再現マクロ macro1 を実行すると、
macro2 の ddeinitiate で、6秒程度待たされるようになってしまいました。
1週間くらい前からですが、このタイミングで秀丸シリーズは変えていません。

メールエディタや他のアプリと切り替えた後は、ほぼ100%です。
VirusBasterを停止してみましたが、変りません。
マクロを1つにまとめると遅くはならないです。
何が問題なのでしょうか?

Windows7 Home
秀丸メールSpeech Version 5.39
秀丸エディタ Version 8.02 Beta 4(さっきBeta 8にしました)
秀丸リーダー Version 2.03


// macro1.mac
loaddll "tkinfo.dll";
#n = dllfunc( "EnvChanged" );
execmacro currentmacrodirectory + "\\macro2.mac";
freedll;
// end of macro1


// macro2.mac
#i = tickcount;
ddeinitiate "HidemaruReader", "Read";
message "ddeinitiateに" + str(tickcount - #i) + "msかかった";
ddeterminate;
// end of macro2

[ ]
RE:39183 マクロでddeinitiateが遅いことNo.39184
秀まるお2 さん 10/09/15 12:11
 
 こちらでmacro2.macを実行したら、

 秀丸リーダー無しの場合:500〜800ms程度
 秀丸リーダーありの場合:0〜16ms程度

 しかかからないようでした。

 なぜ極端に遅くなったのかは僕にもよく分かりませんが、少なくとも秀丸エデ
ィタ/秀丸メールのこの辺の処理は昔から何も変わってないと思います。

 DDE関係は、Windowsのそれ用のライブラリ(DdeInitializeとかDdeConnectと
か)を使ってるだけで、DDEプロトコルの中身について、独自に何かやってると
いうことは無いです。

 ということで、やはり何か、Windowsの環境に関係した所で、何か最近変わっ
たところ関係を探していただくしか無いんじゃないとか思います。

 何か、秀丸リーダー以外のソフトでどうか試してみるといいかもしれませんけ
ど。例えば田楽サーバを起動して、

#i = tickcount;
ddeinitiate "DengakuServer", "AllService";
message "ddeinitiateに" + str(tickcount - #i) + "msかかった";
ddeterminate;

 のようなマクロを実行してみるとか…。

 あるいは他のDDEクライアント系ソフトがあればそれも試してみるといいかも
しれませんけども、何か簡単にテストできるようなDDEクライアント系ソフトっ
てありますかね?(誰か知りませんか?)

[ ]
RE:39184 マクロでddeinitiateが遅いことNo.39186
K'zawa さん 10/09/15 14:23
 
秀まるおさん、こんにちは。
K'zawaです。

> こちらでmacro2.macを実行したら、
>
> 秀丸リーダーありの場合:0〜16ms程度
>
> しかかからないようでした。

これはmacro2.macを直に実行した結果でしょうか?
説明不測でしたが、macro2.macを直接実行しても遅くないです。

田楽サーバでも全く同様でした。
相手は関係ないようです(よく分からないけど)。

[ ]
RE:39186 マクロでddeinitiateが遅いことNo.39188
秀まるお2 さん 10/09/15 14:41
 
 EnvChangedしてexecmacroしてって風にマクロを2段階にしてテストしてみま
した。

 結果は、一応同じようですけども…。

 EnvChanged関数は、レジストリの内容と今現在の秀丸メールの設定を比較して、
何も違いが無ければほとんど何もしないような動作になってます。何もレジスト
リを書き換えないで、ただEnvChanged関数呼び出しをしただけなら、ほとんど何
もしてないも同然ではないかと思いますけども…。

 EnvChanged関数のせいじゃなくて、execmacroのせいで遅くなってるのですか
ね。その辺切り分ければ何か分かるかもしれませんけど。

[ ]
RE:39188 マクロでddeinitiateが遅いことNo.39190
K'zawa さん 10/09/15 15:18
 
秀まるおさん、こんにちは。
K'zawaです。

> EnvChanged関数のせいじゃなくて、execmacroのせいで遅くなってるのですか
>ね。その辺切り分ければ何か分かるかもしれませんけど。

EnvChanged関数は必須条件だと思っていたんですが、
あらためて調べてみたら、macro1.macは、

execmacro currentmacrodirectory + "\\macro2.mac";

だけで再現しました。
ちなみに、秀丸エディタとメールエディタ上で実行しても遅くなることはないで
す。

[ ]
RE:39190 マクロでddeinitiateが遅いことNo.39192
秀まるお2 さん 10/09/15 16:11
 
 とりあえずこちらのWindows7 32bit環境でテストした限りは、遅くなることは
無いようです。

 僕の方で再現すればそれなりに原因究明の手立てはありますけども、僕の所で
再現しないとなると、あとはどうしてもやるとしたら、dump.txtにいろいろ情報
出力して手探りでなんとかするって作戦しか無いですけども、dde関係について
は、実際の処理(アプリケーションソフト間でメッセージをやりとりする処理)
はWindowsまかせでして、しいてなんとか調べるとしても、DdeInitializeとか
DdeConnectとかのAPI呼び出しの前後にログを出すようにする程度しか無いです。

 一週間くらい前から遅くなったということであれば、やはりそっちの線から原
因究明をしていただく方が解決の可能性が高いんじゃないかとは思いますけども
…。

 しいて、僕の方でdump.txt出力でという作戦の方がご希望でしたら、出来る範
囲で、その辺のログを出しまくるように直してみたいと思います。

[ ]
RE:39192 マクロでddeinitiateが遅いことNo.39193
秀まるお2 さん 10/09/15 16:20
 
 あとあと、execmacroした場合に限って、しかも、秀丸メール本体上での場合
に限っておかしいというのも、ちょっとなぜだかよく分からないです。

 execmacroは、内部的に共有メモリを作成して変数などをそこに待避して…。
というような処理はします。

 秀丸メール本体上でマクロ実行するのとエディタ・ウィンドウ上でマクロ実行
するのも、tkinfo.dllの関数呼び出しをしない限りは何も違いは無いと思います。

 ということで、すみませんがよく分かりません。

 とりあえず、dde関係でdump.txt出力だけするように直してみます。

[ ]
RE:39193 マクロでddeinitiateが遅いことNo.39197
K'zawa さん 10/09/16 12:28
 
秀まるおさん、こんにちは。
K'zawaです。

> とりあえず、dde関係でdump.txt出力だけするように直してみます。

よろしくお願いします。

[ ]
RE:39197 マクロでddeinitiateが遅いことNo.39198
秀まるお2 さん 10/09/16 18:24
 
 先ほどV5.50β20をアップロードしたので、それでdump.txtを取ってみて欲し
いです。

 ただ、ログといっても、WindowsのDDE関係APIを呼ぶ前後に出してるだけで、
それ以上の記録は出ないです。なので、ログを取っていただいても秀丸メールの
プログラム修正でなんとか出来るという可能性は低いという気もします。

 DDEの接続用に呼び出すAPIは、DdeInitializeとDdeConnectの2つしか無いの
で、それのどっちかが遅いだけではないかという気がします。何か無駄なAPI呼
び出しの記録が出てれば別ですが、こちらでテストした限りでは、普通に
DdeInitializeしてDdeConnectしてるだけのようでした。

Speech版:
http://hide.maruo.co.jp/software/bin/hmmail550b20speech_signed.exe

[ ]
RE:39198 マクロでddeinitiateが遅いことNo.39199
K'zawa さん 10/09/16 20:05
 
秀まるおさん、こんにちは。
K'zawaです。

おっしゃるとおり、ただ時間がかかっているというような記録が出たようです。

19:45:09.426 (   0) ExecCommandMacroSub MACRO1.MAC
19:45:09.426 (   0) CDdesub::Connect app=HidemaruReader topic=Read
19:45:09.426 (   0) CDdesub::Initialize()
19:45:09.426 (   0) will DdeInitialize
19:45:09.426 (   0) done DdeInitialize
19:45:09.426 (   0) CDdesub::Disconnect
19:45:09.426 (   0) CDdesub::Disconnect nothing to do
19:45:09.442 (   0) will DdeConnect
19:45:16.131 (   0) done DdeConnect
19:45:19.931 (   0) CDdesub::Disconnect
19:45:19.931 (   0) will DdeDisconnect
19:45:19.931 (   0) done DdeDisconnect
19:45:19.931 (   0) CDdesub::Disconnect
19:45:19.931 (   0) CDdesub::Disconnect nothing to do
19:45:19.931 (15589) 40092 ret 1

[ ]
RE:39199 マクロでddeinitiateが遅いことNo.39200
秀まるお2 さん 10/09/16 22:10
 
 昔の、DDEをやるのに直接WM_DDE_xxxxメッセージをやりとりしてた時代は、
DDESPYっていうツールを使ってトレースしてたようではあります。

 今でも使えるんじゃないだろうか…

 それを使うと、具体的にどのDDEメッセージで何が応答してないとかは出るか
もしれませんけど…。


 たぶんですが、DDEのメッセージはデスクトップ上に存在してるすべてのウィ
ンドウにブロードキャスト送信されるので、何かそれに対して即座に反応しない
ウィンドウがあると遅くなるってことじゃないかという気がします。どんなウィ
ンドウがいるかは、これまたSpy系のソフトで調べられますが、とにかく秀丸
メールと秀丸リーダー以外のすべての終了可能なソフトはすべて終了させてテス
トしてみるというのはどうでしょうか。

 それで何か変化があるかも…。

[ ]
RE:39200 マクロでddeinitiateが遅いことNo.39202
K'zawa さん 10/09/17 09:04
 
秀まるおさん、こんにちは。
K'zawaです。

アドバイスありがとうございます。
いろいろためしてみたいと思います。

[ ]