[CASE#23867] 特定のAjaxを使用するアプリケーションで,時々ウインドウ描画等で反応が遅くなる.
技術ノート
2011/09/27
[番号]
技術ノート KGTN 2011091602
[現象]
[CASE#23867] 特定のAjaxを使用するアプリケーションで,時々ウインドウ描画等で反応が遅くなる.
[説明]
GraphOn社の技術者がこの問題の発生する環境で調査したところ,技術ノート KGTN#2011042101 の説明の通り,アプリケーションが 「少し動いて停止する」 という状況を繰り返していました.状況を詳細に調べると,Windows のシステムファイル “jscript.dll” の中でこの状況が発生していることが分かりました. “jscript.dll” は,以下のように Microsoft JavaScript の処理を行うプログラムの一部です.
GraphOn社の技術者は,さらに “jscript.dll” のどの部分で問題が発生しているのか解析を試みましたが,(Windows のシステムファイルということで) 解析に必要なシンボルテーブルが提供されていないため,問題箇所を特定することが困難という結論に至りました.
そこで, GO-Global Ver4.0 では本件の現象が発生しないことから, “jscript.dll” の調査結果をもとにVer3.2 とVer4.0のアーキテクチャの差異のうち関連がありそうな部分を詳細に検討しました.その結果,以下の描画処理の差異が影響している可能性が高いことが分かりました.
Ver4.0ではログオン・プロセスの1つのスレッドがクライアントへ描画命令を送信しますが, Ver3.2 ではセッション上で動作する全てプロセスの全てのスレッドが 「並行して」 クライアントへ描画命令を送信することが可能です.このアーキテクチャの差異が,問題の発生に絡んでいると推測されます (例: Ver3.2 の環境では,“jscript.dll” が並列的な描画を行うと,タイミングにより描画命令の相互干渉が発生し,処理が遅延する. Ver4.0 の環境では, “jscript.dll” が並列的な描画を行っても,ログオン・プロセスが描画命令をシリアル化するため相互干渉が発生ぜず,処理が遅延しない) .
Ver3.2 でプロセッサ・アフィニティがどのように作用するのか明確ではありませんが,しかし弊社作成のプログラム GGAffinify.exe を使ってIEを実行するCPUを1個に限定することで, 「実質的に」 Ver4.0 と同じように1つのスレッドがクライアントへ描画命令を送信する状況になったと考えられます.従って,本件は Ver3.2 の環境で GGAffinify.exe を利用することが,最善の対応策となります.