- 締切済み
バッチファイル処理
バッチファイルの処理の処理速度についてどなたか教えてください。 ある同一のコマンドをよびだすのに、バッチファイル単体で実行する場合と、プログラムからCreateProcessで呼び出す場合の処理速度を比較したのですが、だいぶ異なります。 プログラムで呼び出したいのですが、処理速度が遅くて使いものにならないため、速度UPをしたいのですが、この違いはなにが原因でしょうか。 計測方法は以下です。 ●バッチファイル単体→バッチファイルの中で計測(1秒程度でおわる) ●プログラムからCreateProcessで呼び出し→WaitForSingleObjectでプロセスが終了するまでの時間を計測(10秒ぐらいかかる) それぞれのバッチファイルの中身は以下のとおりです。 (2つのVSSコマンドをコマンドラインから実行するものです) ●バッチファイル単体 ...省略 set time1=%TIME::=% set time1=%time1:~0,10% echo Start %time1% >> %fileLog% 2>&1 ss cp %project% -YAA,BB >> %fileLog% 2>&1 ss add %folder%\%fileAdd% -YAA,BB -I- >> %fileLog% 2>&1 set time2=%TIME::=% set time2=%time2:~0,10% echo End %time2% >> %fileLog% 2>&1 ●プログラムからCreateProcessで呼び出しているbatファイル ss cp $/test/ -YAA,BB ss add C:\Test\test.dat -YAA,BB -I- 2> C:\Temp\ErrorAdd.txt
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
2行目の標準エラーへの出力が大きいのでは? バッチでなく、継承可能で開いたC:\Temp\ErrorAdd.txtのハンドルを 標準エラー(この場合、標準入力と標準出力も必要だが)として ssを直接CreateProcedureで実行してみるとどうなるでしょう?
- nda23
- ベストアンサー率54% (777/1415)
CreateProcessでバッチを実行すると、先ずCMD.EXEの起動時間が入る はずなので、バッチ内部でssだけの開始~終了までの時間と比較する のは不公平な気がします。CreateProcessでssを直に実行する×2で やってみる必要があるのでは? でも、10秒と言うのはいかにも遅いですね。標準出力を抜いていない とか・・・、WSHのExecメソッドで実験してみるとか・・・ >プログラムで呼び出したいのですが 呼び出し元のプログラムはC言語?
お礼
ご回答ありがとうございます。 たしかにCMD.EXEの起動時間等はあるかと思い、プログラムからCreateProcessで呼び出しているbatファイルの2行目を削除してやってみたのですが、これだと.078sでした。 また2行目と同様のaddコマンドを1行追加して実行したところ、やはり12.170sでした。 VSS特有の問題でしょうか。。 呼び出し元はC++です。
お礼
エラー出力をしなくても同じでした。 まったくおてあげです。