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

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

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

Re[9]: CPU使用率が100%を超えないようにする


(過去ログ 62 を表示中)

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

■35584 / inTopicNo.1)  CPU使用率が100%を超えないようにする
  
□投稿者/ 〆太 (3回)-(2009/05/10(Sun) 09:21:09)

分類:[C#] 

C#で開発したアプリケーションで、CPUの使用率が100%を超えることのないように
したいので、アプリケーションがCPUの○○%以上を使用できないようにする・・・
というような設定ができると良いのですが、なにか方法はあるでしょうか。
引用返信 編集キー/
■35585 / inTopicNo.2)  Re[1]: CPU使用率が100%を超えないようにする
□投稿者/ επιστημη (1911回)-(2009/05/10(Sun) 11:10:36)
επιστημη さんの Web サイト
CPU占有率をコントロールするすべは知らないのだけど、
それを落とすすべであれば:

1. プロセスの実行プライオリティを下げる。

管理者権限とかそんなのが必要になるとめんどっちー

2. 実行中、たまにサボる。

オチャラカですが効果あります。
CPUスカスカの時もサボっちゃうのが難点ですが ^^;

引用返信 編集キー/
■35586 / inTopicNo.3)  Re[2]: CPU使用率が100%を超えないようにする
□投稿者/ 渋木宏明(ひどり) (1131回)-(2009/05/10(Sun) 11:43:47)
渋木宏明(ひどり) さんの Web サイト
どうせこれ、タスクマネージャの表示上の話でしょ?

とすると

> 1. プロセスの実行プライオリティを下げる。

は効果ないと思います。

優先度下げても、結果、そのプロセスに処理が回ってきた時にタイムスライス目いっぱいに処理を実行したら、やっぱ CPU 使用率は 100% と表示されたはず。

なので、タスクマネージャの CPU 使用率を下げるには

> 2. 実行中、たまにサボる。

が正解。

具体的には、適当な間隔で Sleep(0) するだけでおk。

引用返信 編集キー/
■35587 / inTopicNo.4)  Re[3]: CPU使用率が100%を超えないようにする
□投稿者/ 〆太 (4回)-(2009/05/10(Sun) 12:32:59)
お答えありがとうございます。

すでにSleep()は入れておりますが、
表示上のことではなく実際にCPUの占有率を制限する
方法はあるでしょうか。

「アプリケーションに○○%以上CPUを占有させない」

とうような設定ができれば良さそうなのですが・・・

引用返信 編集キー/
■35588 / inTopicNo.5)  Re[4]: CPU使用率が100%を超えないようにする
□投稿者/ Azulean (364回)-(2009/05/10(Sun) 13:14:45)
No35587 (〆太 さん) に返信
> すでにSleep()は入れておりますが、
> 表示上のことではなく実際にCPUの占有率を制限する
> 方法はあるでしょうか。

逆にお聞きしたいのですが、なぜ、それを実現したいのですか?


# 手法について、私は回答できないと思いますが、それを実現したい狙いが分からないと、適切なアドバイスをもらえない可能性が高いと思ってお聞きしました。
引用返信 編集キー/
■35589 / inTopicNo.6)  Re[5]: CPU使用率が100%を超えないようにする
□投稿者/ 倉田 有大 (587回)-(2009/05/10(Sun) 13:36:55)
長時間処理するので、バックグラウンドでだらだらと動かしたいということなのかな。
たしかにCPU100%なんかだと、まともにブラウジングも出来なくなりますからね。

最近のCPUだと2個以上のコア使ってますから、重たいスレッドが一個だけだと50%ですむとおもうのですが。

プロセス単位でCPUパワー??%以下しか使うなってできないんだろうなー
引用返信 編集キー/
■35591 / inTopicNo.7)  Re[6]: CPU使用率が100%を超えないようにする
□投稿者/ 〆太 (5回)-(2009/05/10(Sun) 14:31:30)
No35589 (倉田 有大 さん) に返信
> 長時間処理するので、バックグラウンドでだらだらと動かしたいということなのかな。
> たしかにCPU100%なんかだと、まともにブラウジングも出来なくなりますからね。

はい。まさにバックグラウンドで動かしたいからです。

>最近のCPUだと2個以上のコア使ってますから、重たいスレッドが一個だけだと50%ですむとおもうのですが。

なんかヒントになったかもしれません。ありがとうございます。
引用返信 編集キー/
■35593 / inTopicNo.8)  Re[7]: CPU使用率が100%を超えないようにする
□投稿者/ なちゃ (279回)-(2009/05/10(Sun) 15:06:28)
だったら優先度下げるだけで十分のような。
タスクマネージャではほぼ占有の表示になるでしょうが。

引用返信 編集キー/
■35595 / inTopicNo.9)  Re[6]: CPU使用率が100%を超えないようにする
□投稿者/ 渋木宏明(ひどり) (1132回)-(2009/05/10(Sun) 16:14:07)
渋木宏明(ひどり) さんの Web サイト
> たしかにCPU100%なんかだと、まともにブラウジングも出来なくなりますからね。

それが問題なら、優先度下げるだけでおk。
引用返信 編集キー/
■35596 / inTopicNo.10)  Re[4]: CPU使用率が100%を超えないようにする
□投稿者/ 渋木宏明(ひどり) (1133回)-(2009/05/10(Sun) 16:16:48)
渋木宏明(ひどり) さんの Web サイト
> すでにSleep()は入れておりますが、

なら、Sleep() の呼び出し間隔が長すぎるんでしょう。

タイムスライスを使い切る前に Sleep() を呼び出さないと、CPU 使用率の表示は高いままだし、システム全体の「もっさい」感を拭うこともできません。

> 表示上のことではなく実際にCPUの占有率を制限する
> 方法はあるでしょうか。

% 指定する方法はありません。

引用返信 編集キー/
■35598 / inTopicNo.11)  Re[5]: CPU使用率が100%を超えないようにする
□投稿者/ 〆太 (6回)-(2009/05/10(Sun) 16:45:06)
ご意見ありがとうございました。

いろいろ調べていたら、forループをマルチコアで並列処理するParalell.For()
というのが見つかったので、プログラム内のforループの多くを置き換えたところ、
かなり効率的に処理できるようになり、あまりCPUを気にする必要が
無くなりましたので、一応解決ということにします。
解決済み
引用返信 編集キー/
■35600 / inTopicNo.12)  Re[6]: CPU使用率が100%を超えないようにする
□投稿者/ Azulean (365回)-(2009/05/10(Sun) 17:53:38)
2009/05/10(Sun) 17:57:14 編集(投稿者)

No35598 (〆太 さん) に返信
> いろいろ調べていたら、forループをマルチコアで並列処理するParalell.For()
> というのが見つかったので、プログラム内のforループの多くを置き換えたところ、
> かなり効率的に処理できるようになり、あまりCPUを気にする必要が
> 無くなりましたので、一応解決ということにします。

"Microsoft Parallel Extensions to .NET Framework 3.5, June 2008 Community Technology Preview"を使ったと言うこと?
これはCTPであり、テスト目的で提供されているので、これを使って解決とすることには問題を感じます。
(ご自身の環境でのテストだけであれば良いのですが、そのように限定した記述を見受けられなかったため)

> Note: This CTP is for testing purposes only.
> Features and functionality may change before final release, and Microsoft may choose not to provide a final release.
http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&displaylang=en より

> This Parallel Extensions CTP is pre-release software and should not be used in a production environment.
※ヘルプより。


なお、Parallel Extensionsは.NET Framework 4.0/Visual Studio 2010での新機能になります。
引用返信 編集キー/
■35602 / inTopicNo.13)  Re[5]: CPU使用率が100%を超えないようにする
□投稿者/ れい (841回)-(2009/05/10(Sun) 19:31:54)
No35596 (渋木宏明(ひどり) さん) に返信
>>表示上のことではなく実際にCPUの占有率を制限する
>>方法はあるでしょうか。
>
> % 指定する方法はありません。

処理をなるべく細切れにして、
細分化された処理ごとに処理の開始時刻と終了時刻を調べ、
処理終了時に一定の割合になるようにSleepするのはだめでしょうか?

処理の分割サイズや占有率の計測頻度によっては
タスクマネージャー上の占有率は一定にならないかもしれませんが、
処理したい内容によってはうまくいくような気がします。


引用返信 編集キー/
■35608 / inTopicNo.14)  Re[6]: CPU使用率が100%を超えないようにする
□投稿者/ ぱぱいやん (14回)-(2009/05/11(Mon) 09:20:03)
ぱぱいやん さんの Web サイト
バックグラウンドでだらだら動かすなら、処理プロセスをぶった切って、タイマーで回すという手を僕は良く使います。
でも、ここまでしなきゃならないかどうかの判断が難しいところです。

引用返信 編集キー/
■35610 / inTopicNo.15)  Re[7]: CPU使用率が100%を超えないようにする
□投稿者/ 774RR (353回)-(2009/05/11(Mon) 09:40:43)
そう、「なぜ」したいのか、それ次第だったりするわけで

・自分のプログラムをバックグラウンドタスク的動作させたい
→自分のプログラムの実行優先順位を落とすだけでよい
CPU100%表示になるが、フォアグラウンドなタスクの使い勝手はあまり落ちない
自分のプログラムの実行速度もあまり変化しない

・CPU100%表示になるのが嫌いなわがままな(というか半可通な)顧客がいて、
なにがなんでも100%表示をさせたくない
→適宜 Sleep すればいい
自分のプログラムが複雑になる
自分のプログラムの実行速度が落ちる

対処の方向を誤ると無駄に複雑で意味の無い処理を入れ込むことになりかねないよ
まずはプログラムソースコードはまったく一切変更せず、
タスクマネージャでその自作プログラムの実行優先順位を落としてみるといい。
コードいじるのは、俺プログラムの優先順位落とした状態で
フォアグラウンドタスクがどのくらい使い物にならないか試験してからでも遅くない。
引用返信 編集キー/
■35611 / inTopicNo.16)  Re[7]: CPU使用率が100%を超えないようにする
□投稿者/ 〆太 (7回)-(2009/05/11(Mon) 09:54:23)
No35602 (れい さん) に返信
> 処理をなるべく細切れにして、
>細分化された処理ごとに処理の開始時刻と終了時刻を調べ、
>処理終了時に一定の割合になるようにSleepするのはだめでしょうか?


ありがとうございました!解決しました。
CPU利用率を計測して、○○%以上ならば、それ以下になるまでwhileループでSleep()する・・・
というメソッドを作り、プログラム中の要所要所に置いたところ、
アプリケーションが○○%以上は占有しない、ということが実現しました。

以下ソース


public class Perform
{
PerformanceCounter Counter1;

/// <summary>
/// CPU使用率を制限する。
/// </summary>
/// <param name="max_use">利用率がこの値以上だとSleep()</param>
public void Perform_wait(float max_use)
{
Counter1 = new PerformanceCounter();
Counter1.CategoryName = "Processor";
Counter1.CounterName = "% Idle Time";
Counter1.InstanceName = "_Total";

if ((100.0f - Counter1.NextValue()) > max_use)
{
Thread.Sleep(1);
}
}
}




Perform_wait(float max_use);
をプログラムの各所に適当に置いておけば、
max_useを大きく超えてCPUを占有することはなくなります。


解決済み
引用返信 編集キー/
■35612 / inTopicNo.17)  Re[8]: CPU使用率が100%を超えないようにする
□投稿者/ なちゃ (280回)-(2009/05/11(Mon) 10:16:39)
それはちょっとどうかと言う気が…
下手すると終わらなくなりそうだし、リソースの無駄使いがかなり多くなりそうな…

解決済み
引用返信 編集キー/
■35613 / inTopicNo.18)  Re[9]: CPU使用率が100%を超えないようにする
□投稿者/ みきぬ (419回)-(2009/05/11(Mon) 10:32:56)
2009/05/11(Mon) 11:21:13 編集(投稿者)

ネタっぽいのを2つ。

・CPUをデュアルコアに換装しましょう。するとあら不思議、CPU利用率が50%くらいにおさまります。クアッドコアなら25%にまで低下するのでさらに効果的です。

・こんなのがあります。個人的に怪しさを感じるツールですが、プログラムを直す必要はなくなりますし、望みには叶うのでは?
http://mion.faireal.net/BES/

[追加]
・普通はどんなに頑張ってもCPU使用率が100%を超えることはな…うわなにをするやめr
引用返信 編集キー/
■35615 / inTopicNo.19)  Re[9]: CPU使用率が100%を超えないようにする
□投稿者/ 渋木宏明(ひどり) (1134回)-(2009/05/11(Mon) 11:47:06)
渋木宏明(ひどり) さんの Web サイト
> 下手すると終わらなくなりそうだし、リソースの無駄使いがかなり多くなりそうな…

「タスクマネージャの表示上の値ではなく…」て言ってたのに、結局それと同じ値見て調節してるし ;-p

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -