C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

shellメソッドとProcessクラスの違い

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■87596 / inTopicNo.1)  shellメソッドとProcessクラスの違い
  
□投稿者/ k3user (32回)-(2018/06/12(Tue) 11:13:20)

分類:[.NET 全般] 

shellメソッドとProcessクラスとで
スピードに大きな違いがあるのでしょうか?

以下のような環境で
プロセスA→プロセスCの処理を行うとプロセスCの起動〜終了
まで20秒程度かかります。
プロセスC自体はそこまで時間のかかる処理を行っていないので
shellメソッドを使用することに問題があるのでは?
と思い調べては見ましたが、情報が見当たりませんでした。

何か情報等ございましたらご教示のほどよろしくお願いいたします。


●プロセスAの概要
・Exe形式(.NetFramework4.6でビルド)
・定周期でDBの監視を行い、プロセス起動要求があればshellメソッドを使用してプロセスCを起動

●プロセスBの概要
・Exe形式(.NetFramework4.6でビルド)
・要求されたプログラムをProcessクラスを使用してプロセスD起動

●プロセスCの概要
・Exe形式(.NetFramework4.6でビルド)
・OracleDataAccess.dllを使用してバッチ処理を行う。
・単体(デバッグ実行)で3秒程度で終了

●プロセスDの概要
・Exe形式(VB6で作成されたフォームアプリ)


●動作環境
OSバージョン:Windows Server2012
フレームワーク: .NetFramework4.6
ビルド環境:Visual Studio2015 

引用返信 編集キー/
■87599 / inTopicNo.2)  Re[1]: shellメソッドとProcessクラスの違い
□投稿者/ 魔界の仮面弁士 (1708回)-(2018/06/12(Tue) 11:45:45)
No87596 (k3user さん) に返信
> shellメソッドとProcessクラスとで
> スピードに大きな違いがあるのでしょうか?

Microsoft.VisualBasic.Interaction.Shell メソッドと
System.Diagnostics.Process クラス(の Start メソッド)の比較でしょうか?

機能的には Process の方が多いので、手続き的には Shell の方が単純ですが、
実際の速度差は、実環境で試さないと分からないことなので、
ご自身で確認されるのが一番かと思いますよ。


ちなみに前者(Shell)は、CreateProcess API による呼び出しを行います。
https://msdn.microsoft.com/ja-jp/library/cc429066.aspx


後者は、PprocessStartInfo.UseShellExecute を指定した場合には
ShellExecuteEx API による呼び出しを行います。
https://msdn.microsoft.com/en-us/library/windows/desktop/bb762154.aspx

ただし UseShellExecute が意図的に false にされていた場合には、
CreateProcess もしくは CreateProcessWithLogonW API に切り替わります。
https://msdn.microsoft.com/ja-jp/library/cc429072.aspx


> プロセスA→プロセスCの処理を行うとプロセスCの起動〜終了
> まで20秒程度かかります。
ウィルス対策ソフトなどといった、プロセス監視を行っているソフトウェアを
一時的に無効化して試した場合も、特に変化は無いでしょうか。

また、起動されたプロセスC の優先度が低くなっていたりはしないでしょうか。
たとえば、タスク スケジューラーによる起動が行われていた場合、
最近の OS だと、優先度が低めに設定されることになります。
https://www.skyarch.net/blog/?p=2616
引用返信 編集キー/
■87601 / inTopicNo.3)  Re[2]: shellメソッドとProcessクラスの違い
□投稿者/ k3user (34回)-(2018/06/12(Tue) 14:31:37)
魔界の仮面弁士様

返信ありがとうございます。

これから調査を行うので解決には至っていませんが、取り急ぎお礼申し上げます。

>ウィルス対策ソフトなどといった、プロセス監視を行っているソフトウェアを
>一時的に無効化して試した場合も、特に変化は無いでしょうか。
プログラムを実行しているPCにはSymantec EndPoint Protectionが常駐しており
これを停止した状態で試してみようと思います。

>また、起動されたプロセスC の優先度が低くなっていたりはしないでしょうか。
>たとえば、タスク スケジューラーによる起動が行われていた場合、
プロセスA→プロセスCに関してですが、プロセスAはタイマーをセットして(5秒おき)DBを監視して
レコード内にある「プログラム実行要求FLG」が1であれば指定したプログラムを起動するというものです。

実際のプログラムは現在別のテスト中のため動かせないので、サンプルプログラムを作成し、
挙動を確認してみようと思います。


引用返信 編集キー/
■87632 / inTopicNo.4)  Re[3]: shellメソッドとProcessクラスの違い
□投稿者/ k3user (35回)-(2018/06/15(Fri) 08:40:40)
お世話になります。

現在も詳しく調査中ですが、プロセスの呼び出しの
問題ではなくその他の業務ロジック自身に問題が
あることが疑わしくなってきました。
よって本質問は解決とさせてください。

お騒がせしてしまい申し訳ございませんでした。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ