【質問】高速なメール表示(検索)方法No.40718
ダヴィンチ1958 さん 11/06/11 19:34
 

2011/06/11(土) 19:04:34

こんにちは、ダヴィンチ@ユーザーです。

Win32アプリから秀丸メールのメールを表示する仕組みを開発しています。
表示したいメールのmessage_idをあらかじめ取得しておいて、
リストから選択されたらmessage_idを外部ファイルに書き出してから
マクロを呼び出してメールを表示しています。
ただメール表示実行からメール表示まで3〜4秒かかることもあるので
1秒以内に改善できないかと思い、お尋ねします。

大まかなフローは以下の通りです。
1)該当メールをGUI上で選択
2)メール表示を指示
3)メールに該当するmessage_idを外部ファイルに書き出す
4)メール表示用のマクロをオプション指定して秀丸メールを起動
5)該当メールがメールエディタで表示されます。

受信フォルダ直下にある場合は約1秒ぐらいで表示します。
でもそれ以外のフォルダでは3〜4秒かかります。
メールフォルダとメールの合計サイズは約3〜4Gバイトです。

実行しているPCのスペックは、CPU Pentium4 2.6GHz, Memory:1G
Windows XP SP3です。
古いマシンなのでしょぼいです(;--)

但し上記のマシン上でも秀丸メールのmessage_id検索では
どんなに遅くても1秒ぐらいで該当メールをヒットしますので
何か改善策はあるのではないかと思いまして。

どうか皆様のお知恵を拝借させて下さい。
宜しくお願い致します。

※)以下にマクロ側で処理している内容を載せます。
------------------------------------------------------------------
loaddll "tkinfo.dll";
// 受信メール情報ファイルのパスを取得
$home = macrodir + "\\";
$ini = $home + "recvinfo.ini";
// 該当メールのmessage_idを取得
$pack = getinistr( $ini, "cond", "msgid" );
// 検索条件を設定
#n = dllfunc("SelectFolder", dllfuncstr("Account",0),"");
//$pack = "(\"" + $pack + "\",casesense,word,target=person)";
$pack = "(\"" + $pack + "\",casesense,target=person)";
$pack = $pack + ",messageidtarget=messageid,hilight=0,flag=!send,
subfolder=1,inmail=3";
if( #n == 0 ) {
    message "フォルダ選択に失敗しました。";
    endmacro;
}
// main windows freeze
#n = dllfunc("DisableDraw", 1);
// 検索実行
#n = dllfunc("SetFindPack", $pack );
if( #n == 0 ) {
  #n = dllfunc("EnableDraw");
    message "FindPackエラー";
    endmacro;
}
// 検索対象を設定
#n = dllfunc("FindDownInclude");

if( #n == 0 ) {
    #n = dllfunc("EnableDraw");
    message "該当メールが見つかりません。";
    endmacro;
}
else {
    #n = dllfunc("EnableDraw");
    // 該当のメールをエディタで表示
    #n = dllfunc("OpenMail");
}
endmacro;
------------------------------------------------------------------

[ ]
RE:40718 【質問】高速なメール表示(検索No.40720
秀まるお2 さん 11/06/11 22:43
 
 コマンドラインからマクロを実行させた時の検索が秀丸メールのMessage-Id検
索よりも遅い原因としては、秀丸メールが起動された直後にバックグラウンドで
いろいろやる処理のせいじゃないかと思います。

 秀丸メールは、起動されてまず、アカウント/フォルダの階層を、subdir.bin
ファイルに覚えておいた内容から暫定的に復元して、それから少し遅延して、そ
の暫定的に復元したフォルダが正しいかどうかチェックします。画面上では秀丸
メールが起動して準備完了になったように見えても、裏ではそういうチェックを
します。

 それと、起動されてすぐの時はフォルダ毎のメール数の表示とかはしてなくて、
それも少し遅延してバックグラウンドで取得しながら画面を更新していくような
動作をしています。それの他にもメール一覧のキャッシュをロード済みの状態か
ら検索するのかどうかでも検索速度が全然違ってきます。

 そういう処理が裏で動くので、秀丸メール起動直後に何かやろうとすると、そ
の裏の処理と重なるので遅くなるんじゃないかと思います。

 これを回避するには、秀丸メールをタスクトレーに常駐させておけばいいかと
思います。そうすれば単純にマクロ実行だけの処理になるので高速になるんじゃ
ないかと思います。

 とりあえず常駐だけ試してみて欲しいです。

 秀丸メールを常駐させた状態だとしても、1回目の検索よりも2回目の検索の
方が速いとか、そういう違いもあるかと思います。


 常駐させても遅いようなら何か別の原因なんだと思いますけども、マクロ的に
は高速動作するような感じに見えます。それをもっと速く動作させるアイデアは
ちょっと現段階では分からないです。

 とりあえず、常駐してもダメでしたらこちらで再現テストしてみたいので、ま
た連絡して欲しいです。

[ ]
RE:40720 _RE_40718_【質問】高速なメールNo.40721
ダヴィンチ1958 さん 11/06/13 12:46
 
ダヴィンチ@ユーザーです。
ご回答ありがとうございました。
もともと秀丸メールを常駐させた状態で実行しております。
さらに以下のチェックも行いました。
・メール表示マクロの先頭にmessage "run"を追加
・win32アプリからメール表示を実行

<結果>
・メール表示の指示をしてから上記のメッセージダイアログがでるまでは一瞬です。
・5秒ぐらい後に[OK]ボタンを押してからメールが表示されるまでは約1秒ぐらいで
した。
・メッセージなしの場合はやはり3秒ぐらいかかりました。

上記の結果からマクロが起動されてから秀丸側で
何かの処理が行われるのでしょうか。

外部アプリから標準マクロでメールを高速に表示するのはある程度限界があるのでし
ょうか。
もっと高速で処理するような新たなI/Fが必要なのでしょうか。
もっとWin32API的な。または専用のマクロDLLを作るとかでしょうか。

---- "秀まるお2" <xxxxxxxxxxxxxxxxxxx@maruo.co.jp> さんは書きました:
>  コマンドラインからマクロを実行させた時の検索が秀丸メールのMessage-Id検
> 索よりも遅い原因としては、秀丸メールが起動された直後にバックグラウンドで
> いろいろやる処理のせいじゃないかと思います。
>
>  秀丸メールは、起動されてまず、アカウント/フォルダの階層を、subdir.bin
> ファイルに覚えておいた内容から暫定的に復元して、それから少し遅延して、そ
> の暫定的に復元したフォルダが正しいかどうかチェックします。画面上では秀丸
> メールが起動して準備完了になったように見えても、裏ではそういうチェックを
> します。
>
>  それと、起動されてすぐの時はフォルダ毎のメール数の表示とかはしてなくて、
> それも少し遅延してバックグラウンドで取得しながら画面を更新していくような
> 動作をしています。それの他にもメール一覧のキャッシュをロード済みの状態か
> ら検索するのかどうかでも検索速度が全然違ってきます。
>
>  そういう処理が裏で動くので、秀丸メール起動直後に何かやろうとすると、そ
> の裏の処理と重なるので遅くなるんじゃないかと思います。
>
>  これを回避するには、秀丸メールをタスクトレーに常駐させておけばいいかと
> 思います。そうすれば単純にマクロ実行だけの処理になるので高速になるんじゃ
> ないかと思います。
>
>  とりあえず常駐だけ試してみて欲しいです。
>
>  秀丸メールを常駐させた状態だとしても、1回目の検索よりも2回目の検索の
> 方が速いとか、そういう違いもあるかと思います。
>
>
>  常駐させても遅いようなら何か別の原因なんだと思いますけども、マクロ的に
> は高速動作するような感じに見えます。それをもっと速く動作させるアイデアは
> ちょっと現段階では分からないです。
>
>  とりあえず、常駐してもダメでしたらこちらで再現テストしてみたいので、ま
> た連絡して欲しいです。


---以下の内容はコミュニテックス会議室システムにより付加されました。
本文中のメールアドレスは伏せ字に変換されました。伏せ字にしたくない場合
はメールアドレスを""で囲んで書き込んでください。

[ ]
RE:40721 _RE_40718_【質問】高速なメールNo.40722
秀まるお2 さん 11/06/13 13:53
 
 こちらで簡単にテストしてみた所は、特にマクロ実行か手動の検索かでの速度
の違いは無いように思いました。(あくまで体感上ではありますが)

 こちらでテストしたのは、まず、40718番発言のマクロを作成して、さらにマ
クロ用フォルダに適当なrecvinfo.iniファイルを作成しました。

 そのiniファイルで指定するメールは、ヒットするまでに時間のかかる物を指
定しました。

 それで「マクロ・マクロ実行...」からマクロ実行して検索の時間をだいたい
体感で計ってみます。1回目はかなり遅いですが、2回目は約7秒で終わりまし
た。

 その状態でフォルダ枠を選択してからHomeキーを押して、F3キーを押します。
すると同じ検索が手動実行されますが、それも約7秒かかります。

 ということでマクロでやった場合も手動検索の場合も同じじゃないかと思いま
す。

 ついでに、Windowsのスタートメニューの「ファイル名を指定して実行」の所
から、

 " c:\program files\hidemarumail\turukame.exe" /x test.mac

 みたいな感じでマクロ起動させる例もやってみましたが、これは、1回目は、
マクロの出すメッセージが出てくるまでに1秒くらい待った気がしましたが、も
う一度コマンドライン実行すると、今度は一瞬でメッセージが出てきて、そこで
OKしてから同じく7秒程度で結果が出ました。

 という状況ですけども…。

 もしかして、秀丸メールにマクロ実行を指示した後に、ダヴィンチさん作成の
ソフトの方でマクロ実行を待機するような処理をしていたりしないでしょうか。
その処理のやり方によってはそいつがCPUパワーを食ってしまって秀丸メールの
動作が遅くなるって可能性があるような気がします。

 今思いつく原因としてはそれだけですけども…。

 「マクロ・マクロ実行...」からマクロ実行した場合と比べてみれば何か違い
が分かるような気がします。

[ ]