diff --git "a/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/CSRender\344\277\256\346\255\243\345\206\205\345\256\271.adoc" "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/CSRender\344\277\256\346\255\243\345\206\205\345\256\271.adoc" index 8b5e06858dcae8f1f5f31f29300fafee17d62dbb..13b6de545f164c43460284bdc718e61c431853a2 100644 --- "a/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/CSRender\344\277\256\346\255\243\345\206\205\345\256\271.adoc" +++ "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/CSRender\344\277\256\346\255\243\345\206\205\345\256\271.adoc" @@ -21,7 +21,8 @@ include::config.adoc[] = CSRender修正内容 [.text-right] -- -2022/03/17 辻 +ver.1.0 2022/03/17 辻 + +ver.2.0 2022/03/24 辻 -- // tag::sub[] @@ -30,11 +31,130 @@ include::config.adoc[] == 今回の修正箇所 +* 実行中のコンソールウインドウを非表示化 +* レポート名のOK/NGのつけ方を修正 +* 指定先に検版対象を見つけられなかった時のエラー回避を実装 +.3/17 +[%collapsible] +==== * 検版するPDF毎でのレポート出力 * 出力するレポート名に検版結果(OK/NG)を明記 +==== -== 修正の詳細 +== 修正の詳細(3/24) + +=== 実行中のコンソールウインドウを非表示化 +Tool使用後コメントシート抜粋:: +---- +No.9:検版の結果はツールのUI(出力メニュー)や作成したレポートで確認できるので、検版の実行中でコンソールウィンドウの検版結果の表示は不要 +No.17:検版実行時にコンソールが表示されますが不要です +---- +また、コンソールを非表示にすることで、増大した処理時間を縮小する狙い + +菱池さんの方でPureVerifyのCLI起動オプションにコンソール出力制御引数//consoleOutを追加 +/consoleOut: + 0:新規にコンソール作成しメッセージを出力する(デフォルト) + 1:親のコンソールにメッセージを出力する(無い場合は新規に作成) + 2:NULLコンソール(未接続)にメッセージを出力する(メッセージは表示されない) + +以下の2パターンで実装し動作を検証 + +. ProcessStartInfoで直接PureVerify.exeを呼び出し、/consoleOutを2として実行 +`PureVerify.exe ~ /consoleOut "2"` +. ProcessStartInfoでmd.exeを呼び出し、その中で/Cオプションを付けつつPureVerifyを実行 +`cmd.exe /C PureVerify.exe ~ /consoleOut "1"` + +それぞれの動作分析は下記で紹介。結論から言うと両社は結果自体に大きな差は無し。 + +=== レポート名のOK/NGのつけ方を修正 +* 前回の修正で【OK】/【NG】、【日付】で命名していた所をOK_/_NG、[日付]で命名し、全角がファイル名に含まれないように修正 +* NGのときに、ファイル名の末尾につけていた&1%1を外すように修正 +前回までの例:【NG】target.pdf【220324_1500】&1%1.pdf +今回の修正語:NG_target.pdf[220324_1500].pdf + +=== 指定先に検版対象を見つけられなかった時のエラー回避を実装 +前回評価チームに配布した時点のツールでは、指定したフォルダ先に検版対象が見つからないとき(対象フォルダとリファレンスフォルダ内に一致するファイル名が存在しない場合)にアプリが落ちてしまっていた。 + +アプリ落ち自体は、検版処理を対象のPDFファイル毎で並列処理化した際に、それぞれのフォルダ内に共通して存在するファイル名のみをピックアップするように実装していたため、回避できるようになっていた。 + +今回の修正では、実際に対象とリファレンスに共通して存在するファイルが0だった場合に、その旨をメッセージダイアログで表示するようにした。 + +また、指定した対象とリファレンスがそれぞれファイルであった場合は、一致しないファイル名であっても、以下のように処理することで検版するように修正した。 + +. ファイル名が違う場合、そのリファレンスファイルが存在するフォルダに対象フォルダと同じ名前でダミーのファイルを作成(リファレンスを対象の名前でコピー) +. CSRender(CLI)で対象ファイルとリファレンスのダミーをRIP +. PureVerifyで検版 +. 検版終了後に作成したダミーを削除 + +=== その他修正 +* 出力メニューに処理の進捗を表示 +コンソールの非表示化に伴い、以下のように作業の進捗を表示するように修正。 +---- +< 検版処理状況 > + 処理待ち数:10/50 + OKファイル数:30 + NGファイル数:10 +---- +10:残りの画像数、50:検版する画像数、30:検版して一致した画像数、10:検版して不一致だった画像数 + +* 並列処理内の重複箇所を修正 +Pureverifyを並列で実行する際に、それぞれの起動で一致する引数(出力先のパスなど)であっても、毎実行時に生成していたのを並列処理外に移動。並列処理内では、各スレッド毎にことなる箇所のみを処理するように修正。 + +== 修正後の動作分析(3/24) + +処理時間:: +[cols="4*", options="header"] +|=== +|バージョン\ファイル数 +|50ファイル +|100ファイル +|150ファイル + +|前回配布時のツール +|0分36.98秒 +|1分10.73秒 +|1分42.97秒 + +|3/17の修正版 +|3分31.97秒 +|6分08.63秒 +|9分03.73秒 + +|今回の修正版(Processで直接PureVerifyを呼び出し) +|2分54.85秒 +|5分18.76秒 +|8分18.49秒 + +|今回の修正版(Processでcmd.exe /Cを経由して呼び出し) +|3分03.98秒 +|5分18.16秒 +|8分17.88秒 +|=== + +処理を並列化した際に処理時間が増大したことの原因は以下であると考えていました。 + +* レポートの作成回数が増えた(PDFLibの実行回数が増えた) +* コンソールを開いて閉じる回数が増えた + +個人的には上記が半々くらいの比率で影響を及ぼしていると思っていました。そのため、コンソールを非表示化すれば時間を抑えられると思いましたが、検証した結果、コンソールの非表示で削減できた時間は僅かでした。原因として考えられるものを以下に挙げました。 + +* コンソールを非表示にしたといっても、NULLコンソールや親コンソールに書き込んでいるので、あまり時間が変わらない +親コンソールに出力するパターン(/cosoleOut "1")を実際にコマンドプロンプトで実行し確認してみました。親コンソールに出力させても、「コンソールに< 検版終了 >が出力→PureVerifyのCLI処理が終了する(次のコマンドが入力可能になる)→PureVerifyアプリが終了する(タスクマネージャーで終了を確認)」までの流れに1~2秒掛かりました(以下のダンプ)。nullコンソールへの出力でも同様であると考えられます。 +image:cmd_dumpS.png[] + +* レポートの作成がやはり重たい +PureVerifyがコンソールに出力しているレポートの作成時間は大体10秒程(1画像で)なので、こちらもそれなりの時間を要しています。 + +以上を踏まえて、レポートの作成時間はどうしようもないと思います。なので、「コンソールに< 検版終了 >が出力→PureVerifyのCLI処理が終了する→PureVerifyアプリが終了する」のステップで掛かる時間を減らせれば、処理時間を抑えられるかなと思います。解決策としては + +* コンソールの書き込みをいっそのことやめてしまう +* PureVerifyのCLIをGUIから完全に独立させる +* PureVerify.exeを呼び出さずにCSRender内に機能を実装する + +といったところになるでしょうか。 + +== 修正の詳細(3/17) === 検版するPDF毎でのレポート出力 @@ -67,7 +187,7 @@ No.13:検版結果のPDFファイルは従来検版ツールのレポートよ 検版レポートの接頭に【OK】あるいは【NG】を付与し、エクスプローラー上から一目で検版結果を判断可能に修正。 (例:【NG】target.pdf【220317_1500】&1%1.pdf ← target.pdfというファイルを2022年3月17日15時0分に検版し、その結果がNGだった場合のレポートファイル名) -== 修正後の動作分析 +== 修正後の動作分析(3/17) 処理時間:: [cols="4*", options="header"] |=== diff --git "a/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/cmd_dump.png" "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/cmd_dump.png" new file mode 100644 index 0000000000000000000000000000000000000000..4d4755fdb6526591fcc5485ba09d6dabbab7e926 Binary files /dev/null and "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/cmd_dump.png" differ diff --git "a/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/cmd_dumpS.png" "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/cmd_dumpS.png" new file mode 100644 index 0000000000000000000000000000000000000000..c3204c3274ae6b14214a30358a31501c7e412f11 Binary files /dev/null and "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/cmd_dumpS.png" differ diff --git "a/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/pure_console.png" "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/pure_console.png" new file mode 100644 index 0000000000000000000000000000000000000000..2bd9d64651abdc4ff61a81a4f66f3f530733554a Binary files /dev/null and "b/Docs/CSRender\344\277\256\346\255\243\345\206\205\345\256\271/Images/pure_console.png" differ