ページ 11

explorer.exeのCPU使用率が100%

Posted: 2011年6月23日(木) 10:42
by スプー
ここで質問する内容ではないのかもしれませんが、お助けいただけたら幸いです。
多量のファイルを出力するコンソールプログラムを作成しました。実行するとexplorer.exeのCPU使用率が100%になります。

出力する主なファイルは次のようなものです。
・5列301行の浮動小数点数、15KBが1000個程度。
・7列1行の浮動小数点数、1KBが1000個程度。
・35列21行の浮動小数点数、8KBが1000個程度。

出力ファイルは全て同一の作業ディレクトリに出します。
一時的に100%になるのなら特に問題ないのですが、数十分間待っても元に戻りません。
はじめはエクスプローラがファイルの情報を読み込むのに時間がかかっているだけかと思っていたのですが、全て読み込み終わったと思われる時でもCPU使用率は100%のままです。

また、VCでコード作成中及びビルド時にもVCのCPU使用率が100%になったままになることがしばしばあります。
何か関連しているのでしょうか。
この現象に対して回避、対処方法をご存知の方いらっしゃいましたら教えてください。

私の環境は
OS:Microsoft Windows Vista Home Premium 6.0.6002 Service Pack 2 ビルド 6002
Mobile AMD Sempron(tm) Processor 3600+、2000 Mhz、1 個のコア、1 個のロジカル プロセッサ
物理メモリ (RAM) 2.00 GB

Microsoft Visual Studio 2010
Version 10.0.30319.1 RTMRel
Microsoft .NET Framework
Version 4.0.30319 RTMRel

インストールされているバージョン: VC Express
Microsoft Visual C++ 2010 01013-169-2610014-70913

です。
よろしくお願いします。

Re: explorer.exeのCPU使用率が100%

Posted: 2011年6月23日(木) 15:04
by softya(ソフト屋)
あと、Windows Vista でMobile AMD とかCPU使用率が跳ね上がりそうな構成ではありますが次のことを調べてみてください。
・多量のファイルということでウィルス対策ソフトなどファイルアクセスに関与しそうなソフトは他にありませんか?
・CPU100%時の実メモリ使用量も調べられた方が良いと思います。
・多量のファイルが同じフォルダにあるとopenが激遅になるかも知れません(要確認)。

Re: explorer.exeのCPU使用率が100%

Posted: 2011年6月24日(金) 19:30
by スプー
ソフト屋さん、ありがとうございます。
いろいろ試していると、もしかしてバックグラウンドで動いているプロセスやらスワップファイルなどの影響でCPU100%からの復帰に時間が予想以上にかかっていたのかもしれません。
プログラム終了後はすぐには作業フォルダにファイルは出力されないのですが、一旦フォルダを閉じてもう一度開くと出力するべきファイルが全部表示されており、かつ、どのファイルも普通に開く事ができたので「全て読み込み終わった」と思い込んでいただけかもしれません。フォルダを閉じずにジーッと待っていると忘れた頃に全てのファイルが一斉に表示され、その瞬間にCPU使用率も100%から解放されている事から、全てのファイルが出力読み込み終わらなくてもファイルにアクセスできるようなエクスプローラ(vista)の配慮にだまされていただけなのかなと思いました。

>・多量のファイルということでウィルス対策ソフトなどファイルアクセスに関与しそうなソフトは他にありませんか?
ウィルス対策ソフトなど常駐アプリをクローズしましたがこれが直接の原因ではないようです。

>・CPU100%時の実メモリ使用量も調べられた方が良いと思います。
エクスプローラのプライベートワーキングセットはプログラム実行前中後で37~40MBでほとんど変化なしでした。

>・多量のファイルが同じフォルダにあるとopenが激遅になるかも知れません(要確認)。
激遅になる事は今のところありません。

そもそも、プログラムは1時間以上走り続けることもありますが、数秒ごとにファイルはfprintfで出力しているはずなのに、プログラムが終了してからファイルが出力されるのはそういう仕様なのでしょうか?
優先度のようなものを変えたりできるのでしょうか?
また、fprintfの代わりにfwriteを使った方がやはり高速化するのでしょうか?
質問ばかりですいません。

Re: explorer.exeのCPU使用率が100%

Posted: 2011年6月24日(金) 23:01
by softya(ソフト屋)
fprintfで出力されるのは一定サイズ以上に書きだした場合か、fcloseした時です。
もし小さいサイズでfprintfだけした場合はfcloseするまでメモリに蓄えられます。
ただし、fflush()を使えば途中でも強制書き出しすることは出来ますが役目を終えたFILE*はただちにfcloseする事をお勧めします。

explorerはリアルタイム監視には向かないので、コマンドプロンプトでdirを打つたびに増えているなら問題ないと思います。

Re: explorer.exeのCPU使用率が100%

Posted: 2011年6月27日(月) 14:19
by スプー
softya(ソフト屋) さんが書きました:explorerはリアルタイム監視には向かないので、コマンドプロンプトでdirを打つたびに増えているなら問題ないと思います。
dirで確認するとちゃんとファイル出力されている事が分かりました。
CPU使用率の問題はエクスプローラの内部または裏側で勝手に何かやっているものと理解しました。
100%の状態でも他の処理を行うことは普通にできるのでそんなに害はないと割り切ります。

ありがとうございました。