- - PR -
CPU使用率100%を回避する方法
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-30 09:24
【環境】
.NET Framework1.0 VisualStadio2002 Windowsアプリケーション(C#) 上記の環境で、数秒間隔であるファイルの有無を監視する常駐アプリを開発しています。 監視についてはSystem.Windows.Forms.Timerを使用して実現していますが、 実行するとCPU使用率が常に100%になってしまいます。 Timerを使用する上でCPU使用率が100%になってしまうのはしょうがないのでしょうか? 回避策は無いでしょうか? また、別の方法でも良いのですが、CPU使用率が常時100%にならずに 一定間隔でファイル監視する方法はないでしょうか? 以下が現在のソースになります。 static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); [STAThread] static void Main() { //Application.Run(new Form1()); myTimer.Tick += new EventHandler(TimerEventProcessor); myTimer.Interval = 10 * 1000; myTimer.Start(); Thread.Sleep(1000); while(ループ継続条件) { Application.DoEvents(); } return ; } private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs) { myTimer.Stop(); 〜ファイルが存在した場合の処理〜 myTimer.Enabled = true; } | ||||||||||||||||
|
投稿日時: 2006-11-30 09:32
FileSystemWatcherクラスを使用してはどうでしょうか?
Timerを使用せず、FileSystemWatcherのイベントを使用すれば解決できるかと思います。 _________________ -------------------------------------------- HIRO's.NET VB.NETとC#のTipsを掲載しています [ メッセージ編集済み 編集者: HIRO 編集日時 2006-11-30 09:34 ] | ||||||||||||||||
|
投稿日時: 2006-11-30 09:36
昔はWin32API(FindFirstChangeNotificationとか)だったかな。.Net FrameworkだとSystem.IO.FileSystemWatcherを利用するみたいです(外していたらごめんなさい)。
http://www.ascii.co.jp/pb/msdn/article/a17_0020.html | ||||||||||||||||
|
投稿日時: 2006-11-30 09:44
いいえ。CPU使用率が100%になっている原因は、Timerを使っている事ではなく、以下の無限ループにあります。
Forms.TimerはGUIアプリケーションで使用する為の機能です。GUIを持たないアプリケーションなら、System.Threading.TimerやSystem.Timers.Timerを用いたほうがシンプルに実装できるでしょう。 でも、それ以前に・・・
でも、良いんじゃないの? [ メッセージ編集済み 編集者: 甕星 編集日時 2006-11-30 09:47 ] | ||||||||||||||||
|
投稿日時: 2006-11-30 10:23
皆様、回答ありがとうございます。
>shimixさん、HIROさん 自分でも継続して調べていましたが、 お二人の回答にありましたFileSystemWatcherで CPU使用率を常時100%にせずにファイル監視できることが確認できました。 >甕星さん そもそも使うケースが違っていたようですね。 Timerが複数あることは気づいていましたが、どれを使用しても同じだと思っていました。 お恥ずかしい。。。 皆様、ご回答ありがとうございました。 |
1