Closed geotrader closed 8 years ago
レポートをありがとうございます。
遅いのは、もしかしたら、クリップボード履歴の最大数が大きい数字に設定されているなどの理由があるかもしれません。(全てについて重複チェックを行っているため。)
それとは別に、”WM_DRAWCLIPBOARD nested!” の警告メッセージが出ているのも、原因を調べる必要がありそうです。
業務用ということなので難しいかもしれませんが、再現できるExcelのファイルがあればありがたいです。
返信ありがとうございます.
月曜日にクリップボードを小さくして行ってみます.
業務用なので提出することは出来ませんが,VBAは出来るので似たようなファイルを生成して貼ってみようと思います. VBAを扱える環境が自宅にないため時間がかかりますが3月9日には作って貼らせて頂きます. 少々お待ちください.
クリップボードを小さくすると多少改善されたものの依然として大分遅いままですね.
スピードが遅くなるものに酷似したファイルです. エクセル上の単純コピーでもWM_DRAWCLIPBOARD nestedは出るみたいです. 但しなぜそれが大量になるとここまで遅くなるのかは不明です.
添付ファイルはマクロ有効ファイルです. 実行する際は,一応ソースを一読後実行下さい.
再現用のファイルをありがとうございます。 確認いたします。
対応が遅くなってしまいましたが、いただいたファイルを Excel 2013 で実行したところ、
といった実行時間の差でした。またKeyhacありで実行中、Keyhacのウインドウが応答なしになってしまっていました。ただ、10倍速度低下や、WM_DRAWCLIPBOARD nested! といったログは確認できませんでした。
連続するクリップボードの更新イベントを、無視するか、間引く、などの対応を入れたほうがいいのかもしれません。
ご確認ありがとうございます。
再現しませんでしたか。。
現状はkeyhac1.72のブログのコメントに匿名の方より記載があります、 keymap.clipboard_history.maxnum = 0 keymap.clipboard_history.quota = 0 keymap.clipboard_history.destroy() keymap.clipboard_history.checkSanity = lambda : None で乗り切っておりますが、 更新イベントを無視できたりするような機能が正式に追加されると嬉しいですね。
もし対策されるご予定がありましたら再現するかどうかと、 環境のレポートぐらいでしたら協力できるかと思いますのでよろしくお願い致します。
Ver 1.74 で、keymap.clipboard_history.enableHook(False) で、クリップボードの監視を無効化できるようにしました。
こちらの手元だと、このIssueでレポートされた問題 (WM_DRAWCLIPBOARD nested!) を再現することはできませんでしたが、Office 2013 のクリップボードヒストリ機能が有効になっている環境で、Keyhacのクリップボード履歴が更新されない、という問題は発生しました。これについては、こちら (https://github.com/crftwr/keyhac/issues/18) でトラックしていきます。
もし、まだ再現するようでしたら、Officeのバージョンと、Officeのクリップボードヒストリ機能がOnになっているかどうかをレポートしていただけると助かります。 いったんCloseいたしますが、まだ起きるようでしたらReopenをお願いします。
ご対応頂きありがとうございました。
geotraderさん、 1.75でクリップボードの監視方法を変えましたので、機会があったらお試しください。 また、WM_DRAWCLIPBOARD nested! のメッセージですが、こちらでは再現できなかったと申し上げましたが、内部ログONだと表示されていたかもしれません。
該当のWM_DRAWCLIPBOARD nested!のメッセージは発生しなくなっており、 代わりにWM_CLIPBOARDUPDATEと言うメッセージに置き換わっていました。
そのログは開発時の消し忘れですが、内部ログをオフにして、パフォーマンスの問題が発生するかを見ていただければと思います。
勘違いしていました。すみません。
先程上のfor_keyhac.zipファイルで試してみましたが、以下の結果になりました。
よろしくお願いします。
VBAマクロでコピー系を使うとだと思うのですが、 以下のようなログが大量に流れて動作が10倍以上遅くなります.
業務用のVBAで書式の設定されたセルを別のシートから別のシートへコピーするという内容のマクロです.
途中以下の様なメッセージも混じっていたので追記します.