- PR -

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

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-07-14 22:32
ノータッチ デプロイメントということなので、権限周りも調べておくべきかな?
認証に手間取っているかもしれない。
「ドメイン環境で、その端末だけワークグループだった」
「ログインしているユーザがローカルユーザだった」
などが、手間取る理由として考えられます。


あとは、スニッファーなどでネットワーク トラフィックを監視してみたり。
ドルビー
常連さん
会議室デビュー日: 2006/07/11
投稿数: 21
投稿日時: 2006-07-31 15:36
印刷レスポンスの件で、新しい情報を得ることが出来ました。


前回の印刷設定(XMLに保存している)をもとに、
PrintDocumentのプロパティに設定を反映する処理において、
用紙設定(PaperSizeプロパティ)の復元で約20〜30倍ほど
差が出ておりました。
どのような処理かというと、以下のメソッドの通りなんです。

public PaperSize GetPaperSize(PrintDocument document)
{
int w_height = (用紙設定値取得); // 用紙の高さ
int w_width = (用紙設定値取得); // 用紙の幅

// _paperName は 用紙名
PaperSize result = new PaperSize(_paperName, w_width, w_height);

if (document != null)
{
for (int i=0; i<document.DefaultPageSettings.PrinterSettings.PaperSizes.Count; i++)
{
PaperSize p_size = document.DefaultPageSettings.PrinterSettings.PaperSizes[i];

if (p_size.PaperName.Equals(_paperName))
{
result = p_size;
break;
}
}
}

return result;
}


このメソッドでは、単純に設定ファイルに保存されている用紙名と、
PrinterSettingsプロパティのPaperSizesプロパティに定義されている
用紙サイズ名をマッチングしているだけなんです。
果たして、このコードの何が悪いのでしょう?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-31 16:32
メソッドが特定できたくらいであれば、この際、さらなる検証をしても良いのではないでしょうか?
何にせよ、このメソッド中の 'どこが' ボトルネックなのかを絞り込む必要があります。

最初に確認しておくべきところは、

引用:

document.DefaultPageSettings.PrinterSettings.PaperSizes.Count


一応ですが、ここ。(for より foreach の方が良いように思いますが)

引用:

if (p_size.PaperName.Equals(_paperName))


それと、こちらでの検証でしょうか。

ところで、なぜに、Equals メソッドなのでしょうか?

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

foreach を使わない理由なんですけど、
Disposeできるクラスだと、1回のループが終わると、
内部的にDisposeが発生してしまう、というのがありまして、
プログラム全体として、できる限りforeachを使わない方向で
作っていました。

あと、Equqls()メソッドを使っている理由なんですが、
これは、昔どこかで文字列の比較について、Equalsを使え、
ということを教わったことがありまして、その影響もあって、
Equalsを使っています。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-08-01 17:35
引用:

ドルビーさんの書き込み (2006-08-01 16:59) より:
foreach を使わない理由なんですけど、
Disposeできるクラスだと、1回のループが終わると、
内部的にDisposeが発生してしまう、というのがありまして、
プログラム全体として、できる限りforeachを使わない方向で
作っていました。


はん?なにそれ?
引用:

あと、Equqls()メソッドを使っている理由なんですが、
これは、昔どこかで文字列の比較について、Equalsを使え、
ということを教わったことがありまして、その影響もあって、
Equalsを使っています。


嫁。
http://blogs.wankuma.com/shuujin/archive/2006/02/03/21014.aspx

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