現在私はC++CLI(今更感が否めない)のBackgroundWorkerとOpenCVを用いて、カメラから得た画像データをバックグランドで連続保存を行っています。2700Kを使っており、難なく保存ができておりました。下記にあるCPUを使って連続撮影を行った場合、最初は調子が良かったのですが、保存を進めていくうちに動作が重くなりプログラムが止まってしまいます。質問を箇条書きにすると・そもそもBackgroundWorkerはマルチスレッドなのか?・原因はHDDのアクセスの問題か?CPUに負荷をかけ過ぎなのか?・動作が重くなるのはただ単にスペックが足りていないのか?・どこを改善すればよいのか?です。C++/CLIは必ず使うものとします。事実、私は、マルチスレッドもクロック周波数もアクセス速度がどうのこうのも右も左もわからない状態です。以上のことよろしくお願いいたします。使用中のリソースをすべてクリーンアップします。必要なデザイナー変数です。サポートに必要なメソッドです。エディターで変更しないでください。CvImage->height;//PictureBoxと同じ大きさのBitmapクラスを作成する。pictureBox1->Height);//空のBitmapをPictureBoxのImageに指定する。7年前C++/CLIは使ったことが無いですがタスクマネージャである程度参考情報が得られると思います。>・そもそもBackgroundWorkerはマルチスレッドなのか?MSDNにはスレッドだと書いてあります。>・原因はHDDのアクセスの問題か?CPUに負荷をかけ過ぎなのか?タスクマネージャで動作開始時と重くなった時でプロセスのメモリの使用量、CPU使用率、各CPUコアの動作状態を確認してください。スレッド数も確認したほうが良いでしょう。>・動作が重くなるのはただ単にスペックが足りていないのか?プログラム的な問題の可能性が高いと思いますが、プログラム全体が不明なので何とも言えません。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。7年前いつも素早い対応ありがとうございます。プログラムの全体像が分からないと思いますのでプロジェクトごとアップロードさせていただきます。>・原因はHDDのアクセスの問題か?CPUに負荷をかけ過ぎなのか?タスクマネージャで動作開始時と重くなった時でプロセスのメモリの使用量、CPU使用率、各CPUコアの動作状態を確認してください。スレッド数も確認したほうが良いでしょう。タスクマネージャで確認したところ・メモリは大体3GB中2GB使用(まだバッファメモリとしての余裕あり?)・CPU使用率は30%は越えず27%行ったり来たり・各コアの動作状態は4個のコアそれぞれ至って穏やか(スレッドスリープをかけているから?)といった状態になっております。スレッド数はよくわかってませんが、プログラムの動きを単純に数えると、1.カメラで撮影している部分2.画像を保存している部分+進捗モニターの二つになってます。CPUをモニターする限りHDDのアクセスが追いついていないのかな?というのが僕の見解です。7年前こっちでコンパイルできそうにないですね。VS2010がまともに使えないので。VS2012は起動もしないですし、まぁC++/CLIもまともに出来ないんですけどね。VS2012を見る限りマイクロソフトはC++/CLIを止める気でしょうね。あとHDDアクセスの量はタスクマネージャで確認できます。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。7年前HDDのアクセスをモニターしてみました。それでもチンプンカンプンです・・・。大したことが無い様な気がします。差分を計算するとプロセスのメモリが400MB増加、ディスクが約550MB書き込まれています。これに掛かった時間が問題ですね。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。保存が入るたびにグングン伸びてくのですが、ある程度行くとプログラムが止まります。下の画像がちょうどその時です。保存が入るたびにグングン伸びてくのですが、ある程度行くとプログラムが止まります。下の画像がちょうどその時です。それなりに時間が掛かっているのであれば、700MBぐらいの書き込みは問題ないと思います。HDDが容量不足・デフラグ不足で極端に分断化とかしていれば別かもしれません。あとHDDに同時やランダムアクセスするのもマズイです。2964性能がだいぶ差があるのでOSの処理で手間取っているのかも知れません。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。7年前CLIでなくC#、VBに乗り換えたとしても、きっとこの問題にぶつかると思います。HDDへのアクセスの問題が解決できそうな解説サイトとかあると教えてもらえるとうれしいです。2964性能がだいぶ差があるのでOSの処理で手間取っているのかも知れません。http://hardware-navi.com/cpu.phpいくらi7といえど、こんなに差があるのですね。7年前ベンチマークしてみたらどうでしょうか。使い方ディスクアクセスを速くしたいなら、SSDにするとか、RAIDでストライピング構成にするとか、RAMディスクにするという手があると思います(いずれもハードウェアの投資が必要です)もしくは、メモリとCPUに余裕があるので、RAM上で画像を圧縮してからHDDに書き出すのでも効果があるかもしれませんね。7年前ソースを解読していないのですが、HDDの書き込みは同タイミングで衝突しているのでしょうか?あと、スレッド負荷に偏ってメインが回っていないと言うようなことは無いですよね?ちなみに>・各コアの動作状態は4個のコアそれぞれ至って穏やか(スレッドスリープをかけているから?)ですが、System::Threading::Thread::Sleep(1);だとほとんどスリープの意味をなしません。10以上は欲しいです。重くなるとこことですが、このアプリのGUIだけでしょうか?それとも他のアプリも影響を受けていますか?アプリのGUIだけならsleepが足らないせいかも知れません。試しに増やしてみては?>HDDへのアクセスの問題が解決できそうな解説サイトとかあると教えてもらえるとうれしいです。自分で管理すべき問題なので無いとは思います。各部分の処理時間を計測してネックとなっているところを先に探しましょう。Explorerと言うツールがあります。lorer.htmlこれを使えばもっと細かい情報が取れますが、使いこなせるかは別の問題です。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。7年前スレッドのスリープをかけたらいくらかは改善されました!とても助かりましたし、いろいろ勉強になりました。7年前いい感じに画像保存できたので、解決ということにします。ミクプラは自由にリンクできます。