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

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

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

Re[7]: 優先度の設定


(過去ログ 109 を表示中)

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

■64809 / inTopicNo.1)  優先度の設定
  
□投稿者/ きよひこ (1回)-(2013/01/11(Fri) 13:13:43)

分類:[.NET 全般] 

VB.net2010 Windows7です。
初心者です。
 宜しくお願い致します。

統計の処理を作成しで集計を実施しました。
ところが データ量が多く時間がかかってしまいました。
その集計の間に他の処理を行おうとしましたが、この統計処理により他の処理が全く動かない状態になりました。
行いたいことは この統計処理を裏で動かして、その間に他の処理を実施したい です。
統計の処理は時間がかかっても良いので、他の処理を優先して実施出来るようにしたいです。
どれかの設定で実現可能でしょうか?

引用返信 編集キー/
■64810 / inTopicNo.2)  Re[1]: 優先度の設定
□投稿者/ Hongliang (29回)-(2013/01/11(Fri) 13:24:30)
プロセス単位ではSystem.Diagnostics.ProcessクラスのPriorityClassプロパティを使って設定できます。自身のプロセスのProcessインスタンスはProcess.GetCurrentProcessメソッドで取得できます。
スレッド単位ではSystem.Diagnostics.ProcessThreadクラスのPriorityLevelプロパティで設定できますが、インスタンスの特定が難しそう。
引用返信 編集キー/
■64811 / inTopicNo.3)  Re[1]: 優先度の設定
□投稿者/ とっちゃん (34回)-(2013/01/11(Fri) 13:38:19)
とっちゃん さんの Web サイト
No64809 (きよひこ さん) に返信

> その集計の間に他の処理を行おうとしましたが、この統計処理により他の処理が全く動かない状態になりました。
> 行いたいことは この統計処理を裏で動かして、その間に他の処理を実施したい です。

統計処理中に同一プログラムで他の処理を行いたいということですか?
それとも、統計処理プログラムを実行中にほかのプログラムを実行したいということですか?

前者と後者では、同じ統計処理プログラムでも「裏で動かす」ということの意味が変わります。

前者であれば、統計処理を別途ワーカースレッドなどで実行することでプログラムのメイン部分とは別の作業として独立動作します。
#マルチスレッドについての知識が全くない場合はひとまず書籍やMSDN等々で学習してください。

後者の場合は、別々のプログラムで動きますので、ハードウェアスペックを上げていくか
統計処理プログラム自身を見直して他のプログラムにまで影響を与えないように作りかえることになります。

もともと他に影響が出るほどの作業量を持つプログラムのプロセスプライオリティ(実行優先度)を下げてもあまり効果は見込めません。
アイドルレベルまで下げればうまくいく場合もありますが、それらもほとんどの場合付け焼刃的なものなのであまり意味を成しません。

> 統計の処理は時間がかかっても良いので、他の処理を優先して実施出来るようにしたいです。
> どれかの設定で実現可能でしょうか?
>
ということで、いずれの場合もプログラムの見直しが必要になります。

具体的に書く必要はありませんが、どういった感じのプログラムなのか?の説明もないのでこれ以上は言及しきれません。

引用返信 編集キー/
■64812 / inTopicNo.4)  Re[2]: 優先度の設定
□投稿者/ 774RR (42回)-(2013/01/11(Fri) 13:42:06)
いやいやもしかしたら UI スレッド中で集計処理をしているだけとかかも。

引用返信 編集キー/
■64815 / inTopicNo.5)  Re[3]: 優先度の設定
□投稿者/ とっちゃん (35回)-(2013/01/11(Fri) 15:24:50)
とっちゃん さんの Web サイト
No64812 (774RR さん) に返信
> いやいやもしかしたら UI スレッド中で集計処理をしているだけとかかも。
>
おそらく、ボタンハンドラなどで直接集計処理を呼び出している or 行っている
じゃないかと。

いずれにしても本人の降臨待ちですが。

引用返信 編集キー/
■64819 / inTopicNo.6)  Re[2]: 優先度の設定
□投稿者/ きよひこ (2回)-(2013/01/11(Fri) 18:51:20)
皆様 
御回答有り難う御座います。
やりたいことは統計処理とは別のプログラムを実施です。
 また、統計処理は画面から指定した日付でサーバからSQLにてデータを取得しそれを
 集計して結果を印字するといった処理です。
 
 すみません。簡単で申し訳ありません。この様な内容です。
引用返信 編集キー/
■64822 / inTopicNo.7)  Re[3]: 優先度の設定
□投稿者/ Azulean (80回)-(2013/01/11(Fri) 22:52:34)
2013/01/11(Fri) 22:54:33 編集(投稿者)

No64819 (きよひこ さん) に返信
> やりたいことは統計処理とは別のプログラムを実施です。

それは最初に書いていましたよね。
あなたはどこまで理解していますか?、作り込めていますか?という質問があったわけですが、お答えいただけていないようです。
(もっとも、そのずれた受け答えによってどういう状況かがわかってしまったわけですが)

「スレッド」という概念をご存じないようですので、まずはそれを勉強してみてください。
スレッドを知らずに使える仕組みが最近は増えてきているのですが、スレッドを知らずに使うと不具合の元になるだけなので。


おおざっぱに書くと、普通のプログラムには一つ以上のスレッドを持ちます。
そのスレッドという単位でユーザー操作への応答、画面への描画、計算処理などを進めていくわけです。
VB.NET のボタンイベントなどに時間のかかる処理を書いてしまうと、その処理にかかり切りになってしまい、ユーザー操作への応答の処理などに戻らなくなり、他の処理が動かなくなります。
同時に複数の処理を実行するためには、一般に複数のスレッドが必要ですが、スレッドが複数になると同時に書き込まないように排他したり、変数を適切に受け渡したり、終了を待ったり、非常に複雑になるなど、難易度が一気に上がります。
そういったことをどうしても実現したいのであれば、スレッドとはどういったものなのか、マルチスレッドプログラミングはどういったものなのかを学ぶところから始めてください。いきなり実践するのではなく、かんたんなプログラムでマルチスレッドの問題点・対応方法などを身につけてからでも遅くはありません。


// マルチスレッドを自分で理解しなければ問題は解決しません。
// 投稿をスルーするのではなく、自分の学習のきっかけにしてください。
引用返信 編集キー/
■64824 / inTopicNo.8)  Re[4]: 優先度の設定
□投稿者/ zans (1回)-(2013/01/12(Sat) 06:26:44)
No64822 (Azulean さん) に返信
> 2013/01/11(Fri) 22:54:33 編集(投稿者)
>
> ■No64819 (きよひこ さん) に返信
>>やりたいことは統計処理とは別のプログラムを実施です。
>
> それは最初に書いていましたよね。

質問者の「統計処理とは別のプログラムを実施」とは、 No64811 とっちゃんさんの

> それとも、統計処理プログラムを実行中にほかのプログラムを実行したいということですか?

に対しての答えなのでしょう。
引用返信 編集キー/
■64826 / inTopicNo.9)  Re[5]: 優先度の設定
□投稿者/ Azulean (81回)-(2013/01/12(Sat) 15:46:44)
No64824 (zans さん) に返信
> 質問者の「統計処理とは別のプログラムを実施」とは、 No64811 とっちゃんさんの
>
>>それとも、統計処理プログラムを実行中にほかのプログラムを実行したいということですか?
>
> に対しての答えなのでしょう。

投稿がそういう対応だと考えるとしても、”プログラム”の解釈に迷います。
とっちゃんさんが明示されていた「プログラム」とは、プロセス単位(exe 単位)ですが、きよひこさんもその認識に立っていたか、「プログラム」を「一連の処理」とだけで考えていたかがわかりません。

仮にプロセス単位だったとしたら、「他の処理が全く動かない状態になりました」という状況にはよっぽどでないと到達しないと考えていますので、「プロセスを分ける」という概念には届いていないのではないか?と私はとらえました。

そうなると、最初の質問の段階からあまり進められていないことがわかります。
(うまく聞き出せていないという問題もあるのですが…)

------

きよひこさんへ

なぜ「他の処理が全く動かない状態」になったのかを、まず知るべきだと思います。
それを知らない状態で、第三者にアドバイスを求めても、問題の本質がわからないので適切なアドバイスができません。
(今回のご質問は複雑にすでに作り上げられているコードがベースだと思われるため、ちょっとした概要レベルでは判断できませんし、コードを貼り付けるにしても大量になるために第三者に理解してもらうのは無理だと思っています)

基本的には、何らかのループ、時間のかかる処理を実行している間、他の処理は実行されません。(一つのスレッドにおいて)
この間に並行して処理を実行させるためには、(1)別の exe(プロセス)を起動しておく、(2)マルチスレッドプログラミングで一つの exe(プロセス)の中で、同時に処理を実行できるようにする、のいずれかが考えられます。

(1)と(2)にはそれぞれメリット・デメリットがあります。
多くの場合は(2)になるとは思いますが、それを判断するには、作っている処理(コード)の前提・制約などに依存しますし、それぞれの方法でアドバイスの方向性ががらりと変わりますので、今の時点でアドバイスは難しいでしょう。

このため、マルチスレッドの概念を勉強していただくことで、スレッドとは何か、「他の処理が全く動かない状態」になったのはなぜかを知っていただき、これからの問題解決の方向性をご自身で考えてもらわないといけません。
概念と問題を理解した上で、部分的なご質問をされれば、そのピンポイントに対しては回答が得られると思います。


個人的には、同僚・上司・先輩・後輩など、身近な人に相談することが解決の近道だと思います。
Web ベースではあなたの置かれている状況・スキルなどがわからず、また、コミュニケーションにかかる時間も非常に大きくなるため、解決に多大な時間がかかるためです。
引用返信 編集キー/
■64835 / inTopicNo.10)  Re[6]: 優先度の設定
□投稿者/ shu (139回)-(2013/01/15(Tue) 12:44:06)
BackgroundWorker の使用も検討してみるとよいかもしれません。
スレッドを直接扱うよりは少し楽です。
引用返信 編集キー/
■64853 / inTopicNo.11)  Re[7]: 優先度の設定
□投稿者/ きよひこ (3回)-(2013/01/16(Wed) 23:01:11)
to 回答頂いた皆様へ

 お返事が遅くなり申し訳ありませんでした。
 また 沢山の御回答有り難う御座いました。
 私は汎用機 COBOLをメインで担当していてTSS(タイムシェアリング)の考えが根底にありました。
 プライオリティの設定が何処かにあり今回の統計処理もその設定を実施すれば意外と簡単に解決するはず…
 と考えていましたが、スレッドの考え方を学んで再度具体的な質問をさせて頂きたいと思います。

 いろいろ お世話になりました。
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -