プロジェクト

全般

プロフィール

[GGH4.0] クライアント印刷機能が有効な時,印刷画面の表示に時間がかかる (VB6 Printers コレクション) .

技術ノート
2012/04/09

[番号]
技術ノート KGTN 2012011201

[現象]
[GGH4.0] クライアント印刷機能が有効な時,印刷画面の表示に時間がかかる (VB6 Printers コレクション) .

[説明]
状況を確認するために弊社ツール GGPrinterCheck.exe を実行して下さい.このプログラムは,セッション上で利用できるプリンタを数え上げ,その時に要した時間を画面に表示します.下記の例では,20台のプリンタが存在し,最初は1台当り約1.2秒,最後は1台当り約1.9秒,全体で34秒要していることを示しています.

弊社でさまざまな検証や実験を行った結果,この問題は “VB6 のPrinters コレクション” を利用した場合に発生することが判明しました.ソースコードがある場合は,Printers コレクション ではなく EnumPrinters 関数 を使用してプリンタリストを作成することで問題が解消します.上記説明と同じ条件で EnumPrinters 関数 を使用して実行したところ,次頁の画面の通り1秒未満で全てのプリンタがリストされました.

“VB6 のPrinters コレクション” を利用した場合の現象については,現在GraphOn社へ問い合わせを行っており,回答が届き次第この技術ノートに反映します.場合によっては, VB6 と GGH4.0 それぞれのアーキテクチャに起因する制限事項という可能性があります.

補足1
“VB6 のPrinters コレクション” を利用した場合に遅くなる原因は,Windows のサービス “Spooler” のプロセス (spoolersv.exe) がCPUを非常に多く消費していることに起因しています.恐らく, “VB6 のPrinters コレクション” が効率の良くない処理を行っており,GGのクライアント印刷機能が有効な場合,その処理 (APIをフックしてクライアント側のプリンタも含めてプリンタを数え上げる処理) が加わり,プリント・スプーラーの負荷が高まったのではないかと推測されます.なお, EnumPrinters 関数を使用した場合は,プリント・スプーラーのCPU使用率は0% (またはほぼ0%) です.

補足2
マイクロソフト社の Process Monitor というツールで spoolersv.exe の挙動を確認したところ,レジストリ “HKCU¥Printers¥Connections” について RegOpenKey ? RegQueryKey ? RegEnumKey ? RegCloseKey という処理を極めて多く繰り返して行っており,このことがCPUを非常に多く消費している原因だと考えられます.なお,この現象は Windows Server 2008 および Windows Server 2003 の両方の環境で確認することが出来ました.また, Performance Auto-Tuning (ClientProcessingBatch = 1) を有効にしても,状況に変化はありません.

補足3
補足2について,プリンタ数を5台,10台,20台 と増やして問題のレジストリのアクセス回数を確認しました.5台で400回,10台で1400回,20台で5000回で,プリンタ数が2倍になると,アクセス回数が約3.5倍になります.このようなことから, “VB6 のPrinters コレクション” が二重ループのような処理でプリンタを (非効率に) 探しているのではないかと推測されます.
補足4
(2012-01-27) GraphOn社は, VB6 のPrinters コレクションの処理とGGH4.0のクライアント印刷機能の相性に起因する問題だと認識し, GGH4.0.1 Patch 5 で VB6 のPrinters コレクションの処理 (問題) に対応するとのことです

(2012-02-23) GraphOn社より, 「技術検証用のビルドを準備中」 との連絡がありました.弊社へ提供され次第,そのビルドで問題が解消するかどうか検証を行います.

(2012-02-24) 技術検証用のビルドで試験したところ,1台当り 0ms 〜 16ms で処理されました (22台のプリンタで約1秒) .従って, GGH4.0.1 Patch 5 でこの問題が解消されることは確実だと思われます.

(2012-04-04) GGH4.0.1 Patch 5 (4.0.1.12187) で,この問題が修正されました.

ファイル

KGTN2012011201.pdf (251 KB) kitasp 技術センター, 2012/04/09 09:26