Hit a Hint for Windows の処理速度改善を色々やっていて気になったところをメモ。
64bit Windows 上 での Windows Automation API のパフォーマンスについて
64bit プロセス上で Windows Automation API を使用した場合
32bit で動作しているソフトウェアに対してのレスポンスが悪い。
32bit プロセス上 (WOW64上) で Windows Automation API を使用した場合
64bit で動作しているソフトウェアに対してのレスポンスが悪い。
ソフトウェアによっては 100ms で終わっていた処理が 400ms かかる。
WOW64 のオーバーヘッドなのかなと思ったけどそれだけじゃなさそうで、
API 内部で Exception が投げられまくるときがあるのも原因だと思われる。
「クラスが登録されていません。」という Exception を投げられるときがあって、
この場合、レスポンスが悪くなるのは納得できるが、
処理上必要な情報は取得できているので Exception を投げている意味がわからない。
64bit プロセス上では 32bit の COM オブジェクトが見えないから
Exception 投げるのはまだ納得できるのだけど。。。
COM オブジェクトとれなかったら別の方法で情報取得するように API 内部で処理してるとか??
実際、 API 外部ではその Exception を catch できないし。
Exception 対策に 32bit の COM オブジェクトを 64bit 環境で使えるようにする方法もみつけたけれど、
これはレジストリを操作しなきゃならないので今回の場合は微妙。
一応リンクを。
Using a 32bit COM object in a 64bit environment
考えるのも調べるのも面倒になってきた。
何も考えずに解決するには 64bit 上のプロセスに対しては 64bit 上で、
WOW64 上のプロセスに対しては WOW64 上で Windows Automation API 動かすとかすればいいのかな。
単純に 64bit プロセスと 32bit プロセス両方立ち上げてそれぞれの環境内で処理すればいいのか。
わかりやすいし、割と自然なやり方のような気がしてきた。
この方向で改善してみようかな。
2013/11/10
|
カテゴリ:プログラミング
|
トラックバック(0)
|
コメント(0)