- PR -

印刷ダイアログの表示が遅い

投稿者投稿内容
ドルビー
常連さん
会議室デビュー日: 2006/07/11
投稿数: 21
投稿日時: 2006-07-11 09:23
VisualStudio2003 で、C# .NET で印刷する機能を実装しています。
ビルドしたEXEは、ノータッチデプロイメントで実行します。


印刷ダイアログは自作し、帳票出力時の各種カスタマイズを行なっています。
例えば、用紙の余白であったり、ヘッダー・フッター等です。
これらの変更点は、XMLファイルに保存し、アプリケーションが
再起動されたときに、保存された情報を読込んで復元する、
というのが主な仕様です。

PrintDocumentオブジェクトは印刷アクションごとに毎回作成しています。
そして、保存された設定情報があれば、ダイアログを表示する前に、
PrintDocumentオブジェクトに反映します。

ところが、ごく一部の端末ですが、この印刷ダイアログを表示するまでに
最大180秒程度かかるとの報告がありました。
開発環境含め殆どの端末では1〜2秒未満で表示されます。
90〜180倍もの時間差が生じるのは異常であり、
この件について、調査を行なっておりました。


実際にダイアログが表示されるまでの処理過程を調べてみても、
原因と思われるポイントが見当たりません。
現在わかっている端末の情報としては、
 CPU:Celeron2.66GHz
 メモリ:256MB
 HDD:空き容量十分
 OS:Windows XP
となっております。
作成したアプリケーション以外のOffice等の製品で同様の現象が起きている
という情報はなく、途方に暮れております。


いったい、どのような原因があるのでしょう?
調査のポイントや原因などご教授頂ければと思います。

Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-07-11 10:08
引用:

作成したアプリケーション以外のOffice等の製品で同様の現象が起きている
という情報はなく、途方に暮れております。



解決策ではないのですが、ちょっとだけ...

プリンタはネットワークプリンタではないでしょうか?

WinMeやWin98(WinNTもだったかな?)上のネットワークプリンタに印刷する場合
(ネットワークプリンタのポートがNetBEUIとなっていると)、XPでは印刷ダイア
ログの表示がかなりかかるという現象が当方では発生しました。

結局解決はしていませんが、
http://support.microsoft.com/default.aspx?scid=kb;ja;834350
などを試してみて若干改善はしたようです。

その他にも最新のプリンタドライバにすると改善したなどという情報もあるよう
です。

上記の現象はすべてのアプリで発生したので今回の質問には当てはまらないかも
しれませんが、ちょっとでも参考になれば。。。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-07-11 10:20
さかもとと申します。

私も解決策ではないのですが

>ごく一部の端末

というのは他にも同様の現象が起こる端末があるということでしょうか?
もしあれば、そこから探れば糸口があるかもしれません。
ドルビー
常連さん
会議室デビュー日: 2006/07/11
投稿数: 21
投稿日時: 2006-07-11 10:29
Katzeさん、返信ありがとうございます。
一意見として参考にさせていただきます。

プリンタがネットワークプリンタであるか、についてですが、
これはちょっと不明なところです。(実際に現地で作業していないもので)
恐らく1台のプリンタサーバーが存在していて、
これを共有しているものと思われます。

印刷ダイアログの表示が遅いという件、
何故に.NETアプリケーションだけで起きるのか、
それが気になりますね。印刷ダイアログは自作でして、
GUIでPrintDocumentを設定していく、というものでした。
Officeや他のソフトウェアで使われているWindows標準の
印刷ダイアログが遅いという報告がないために、
.NETの不具合、というところも考えながら調査をしていました。

--------------------------

さかもとさん、返信ありがとうございます。

ごく一部の端末についてですけど、確認できているのは、
1台の端末で現象が起きているようです。
正常に動いている端末との環境的な差はないようです。

考えられる、あらゆる手法をもって解決するしか、
方法がないようで、掲示板を含め、模索していました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-11 10:34
引用:

ドルビーさんの書き込み (2006-07-11 09:23) より:

PrintDocumentオブジェクトは印刷アクションごとに毎回作成しています。
そして、保存された設定情報があれば、ダイアログを表示する前に、PrintDocumentオブジェクトに反映します。

ところが、ごく一部の端末ですが、この印刷ダイアログを表示するまでに最大180秒程度かかるとの報告がありました。


印刷ダイアログを表示するまでにいくつかのロジックがあるかと思いますが、
実際に、'どこで' 手間取っているのかを判明させるのが先ではないでしょうか?

「ネットワーク プリンタ」 云々の話は、その後になると思います。
(話を聞く限り、その端末の環境のせいだとは思いますけど)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ドルビー
常連さん
会議室デビュー日: 2006/07/11
投稿数: 21
投稿日時: 2006-07-11 10:52
じゃんぬねっとさん、返信ありがとうございます。

運用環境での報告でしたので、
ソースレベルのどこで、というのが把握できない状況です。

印刷の操作(ボタンをクリック)してから、ダイアログのフォームが
ロード完了するまでに、約60のステップを踏んでいます。
・印刷用パラメータオブジェクトを生成する
・印刷ダイアログオブジェクトを生成する
・保存された印刷設定情報を、PrintDocumentに設定する。

以上が印刷前のステップになりますが、この段階で、
特にパフォーマンス低下を招くようなコードは書いていません。

開発を担当している当方としても、開発環境で再現させたいと
思ってはおるのですが再現できずにおります。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-11 12:17
引用:

ドルビーさんの書き込み (2006-07-11 10:52) より:

開発を担当している当方としても、開発環境で再現させたいと
思ってはおるのですが再現できずにおります。


開発環境がなくても、処理時間を出力するようにしたアセンブリを一時適用すれば判明ですきますよね。
昔ながらの手法ですが、今でもたまに使います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ドルビー
常連さん
会議室デビュー日: 2006/07/11
投稿数: 21
投稿日時: 2006-07-12 15:11
> じゃんぬねっとさん

アドバイスありがとうございます。
更に情報を調べているところです。

処理時間の測定については、
ゴミプログラムを作って測定をしようと思っています。
ソースレベルの机上デバッグにも、そろそろ限界を感じてまして。。。

プリンタドライバ関係のチェックポイントなどで、
いろいろ事例など教えていただければ、
環境まわりのチェックがしやすいと思います。

スキルアップ/キャリアアップ(JOB@IT)