none
リダイレクトプリンタを使って印刷すると、印刷処理に時間がかかります。 RRS feed

  • 質問

  • サーバ上にあるプログラムを、複数のPCからリモートデスクトップ接続で起動しています。
    そのプログラムで、リダイレクトプリンタを使って連続印刷すると、印刷処理にかなり時間がかかります。
    この時間を短縮する何か良い方法はないものでしょうか?

    思うに、リダイレクト先のプリンタの情報をサーバが取得する処理が、連続印刷処理を一つ行うごとに実行されているからだと思うのですが…。
    この「情報を取得する処理」を、行わない、もしくは最初の一回のみ行う方法があれば、解決するのではと考えていますが、そのような方法はありますでしょうか?

    VisualStdio 2015です。

    2017年11月27日 6:27

すべての返信

  • お暇でしたら、こちらの質問にも、
    1. そのリモートデスクトップのWindowsは?(7とか8とか10のことです)
        他のPCをリモートデスクトップにしても同じですか?
    2. そのリモートデスクトップで他のアプリだと早く印刷できるのですか?
    3. 連続印刷とはどのようなものですか?

    [追加]2017-11-28 Tue. 15:56
    サーバー = リモートデスクトップですか。

    • 編集済み ery srow 2017年11月28日 6:57
    2017年11月28日 6:46
  • 1.
    リモートデスクトップ接続のクライアント側は「Windows10」、サーバ側は「WindowsServer2012 Standard」です。
    クライアントPC(Win10)から、サーバ上(Win2012)にあるシステムを起動し、印刷はクライアントPC(Win10)に接続しているプリンタへ出力しています。
    そのためにリダイレクトプリンタを使っています。

    1.他のPCをリモートデスクトップにしても同じですか?
    試してません。が、おそらくそうだと思います。

    2.
    試してません。

    3.
    「Printメソッドを複数回実行すること」を、ここでは連続印刷と呼んでます。
    印刷したいドキュメントが複数あって、それぞれのドキュメントを処理する都度、Printメソッドを呼んでます。


    印刷したいドキュメントは、GrapeCityさんご提供のActiveReportsです。
    このActiveReportsにPrintメソッドが用意されてるので、実際はそれを使って印刷処理してます。

    リダイレクトプリンタを使わずに、サーバに接続されたプリンタへ印刷出力すると、処理が速いです。
    リダイレクトプリンタを使うと、処理が遅いのです。
    思うに、Printメソッドを実行するたびに、リダイレクト先のプリンタ情報を取得してて、そのせいで遅くなってるのかもしれません。

    なお、ActiveReportsのPrintメソッドの使い方によっても処理速度に差が出ます。
    このPrintメソッドの第3引数は、「Trueの場合は、印刷が個別のスレッドで行われます」というもので、これをTrueにすると速く、Falseにすると遅くなります。
    しかしTrueにすると、実際の印刷順序が、Printメソッドを呼んだ順番通りにならず、これもこれで問題なのです。
    Trueにすると、印刷処理が非同期(マルチスレッド)で行われるため、速くなる代わりに印刷順序が定まらなくなるようです。
    これを解決する方法もあればいいのですが。

    GrapeCityさんにも問い合わせたのですが、
    「ActiveReportsの印刷処理は、ActiveReportsが直接プリンタを制御している訳ではなく、
    インタフェースである.NET Frameworkの印刷機能を呼び出しているのみです。その先のデバイスは意識しておりません。
    それにそもそも、リモートデスクトップ接続は保証対象外です。」
    というご返答でした…。

    先週からずっとこの問題に頭を悩ませています。

    2017年11月28日 7:49
  • リモートデスクトップ接続云々は置いておいて、以下の2点を問題点として考えてみます。

    ①同期処理で印刷すると遅い。
    ②非同期処理で印刷すると印刷順序が狂う事が有る。

    上記2点に対する対策としてですが、
    非同期の処理を一つ分岐してその中で印刷を順番に行ってはいかがでしょうか?

    イメージ
    ①(同期処理での印刷)
     ・同期印刷(1)
     ・同期印刷(2)
     ・同期印刷(3)
     ※順番通りに印刷されるが、遅い

    ②(非同期印刷)
     ・非同期印刷(1)
     ・非同期印刷(2)
     ・非同期印刷(3)
     ※早いが、順番が狂う事が有る(3が2より先に印刷されたりする)

    ③(非同期の別処理から同期で印刷)
     ・非同期処理を分岐
      ・同期印刷(1)
      ・同期印刷(2)
      ・同期印刷(3)
     ※早いし順番も狂わないが、印刷エラーをキャッチしにくい

    結局の所どれを選ぶかだと思います。
    求める回答と合わなかったらすみません。

    2017年11月28日 9:00
  • "WindowsServer2012 Standard" は関係ないみたいですね。
    https://support.microsoft.com/ja-jp/help/3073630/remote-desktop-easy-print-runs-slowly-in-windows-server-2012-r2
    "簡単に印刷"="Easy Print"。

    一応念のため、他のアプリでもリダイレクトプリンタを試してみないと速度の比較が出来ないと思います。

    「ドキュメントを処理する都度、Printメソッドを呼んでます。」それでは10個のドキュメントを印刷するには10回Printメソッドを呼べばすむわけですか?
    それで一つのドキュメントを印刷すると次のドキュメントの印刷開始まで休憩があるわけですか?
    (遅いというのはゆっくりゆっくり印刷するのかな...見てみたいけど)

    関係はないと思いますが、プリンタ(ドライバ)の設定(家庭用)添付.

    [追加]2017-11-28 Tue. 19:58
    他のアプリというのはInternet Explorerとか何でもいいのです。

    • 編集済み ery srow 2017年11月28日 10:59
    2017年11月28日 10:50