• ベストアンサー

プログラムの処理速度について

プログラムの繰り返し文(WhileやFor)の処理速度 は、マシンの何で決まるのでしょうか? WinXPでは1秒間に100回処理したにもかかわらず Win7では1秒間に1回しか処理せず、とても遅くて 困っています。 何か情報ある方、回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

> System.Console.Beep()  記法から考えてVC#で.NETの開発を行ってると想定しますが、これはパラメータ無しの場合、800Hzの音を200ミリ秒出すものです。  つまり、シングルスレッドで組んだ場合、1回の実行で200ミリ秒の実行時間が掛かります。したがって、プログラムが正常ならWindowsのバージョンによらず、単純にループで繰り返した場合、1秒回の実行回数は5回以下(約5回)となります。  ここから、XPで100回とかWin7で1回というのは、普通に考えてあり得ない値です。  どこかプログラムが間違っているか、何らかの待ちの入る処理が挟まっているかとしか考えられません。

judgementskill
質問者

お礼

マシンの性能っぽいですね。 プログラムはBeep1文だけです。

その他の回答 (5)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.5

何を繰り返しているのかによります。 ・円周率の計算の場合 ⇒ CPUの速度(クロック周波数) ・ファイルのコピーの場合 ⇒ ディスクの速度 ・画面に3D表示の場合 ⇒ グラフィックチップの能力 ・ディスク中のファイルに対する文字列検索 ⇒ ファイル数とファイルサイズ合計とディスク速度とCPU速度

judgementskill
質問者

お礼

回答ありがとうございます。 処理内容は System.Console.Beep(); です。

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.4

常識的に考えると「そんなことはありえない」。 そもそも言語は何? ループ内でどんな処理してるの? whileとforの違いはループから抜けるための条件。 whileはループ内で判断するがforは基本的に回数指定でしょ? だからforのほうがifで条件判定しない分速くなるはずだが、それにしても100回が1回になるほど差が出るはずがない。 WinXPがi7でWin7がMMXPentiumならの位の差が出てもいいかもしれないけど、WinXP以上のWindowsが快適に動くパソコンでそれはありえない。 処理内容などの諸条件がわからない以上プログラムの作り方が悪いとしか言い様がない。

judgementskill
質問者

お礼

回答ありがとうございます。 処理内容は System.Console.Beep(); です。

noname#140045
noname#140045
回答No.3

昔、まだマイコンと言われていた頃、あるいはMS-DOSのころには、プログラムを実行している間は、そのプログラムがCPUを占有していました。 また、この頃のCPUは今と比べると単純なため、それぞれの(機械語の)命令ごとに処理速度が決まっていました。 ですから、昔はそれを加算していくことで処理時間を計算することができました。 今は、いろいろな技術が発達したため、一概には言えなくなりましたが、基本的な考えは同じです。 それでは、そこから一概に言えない要因を考えればいいと思います。 1つは、CPUにキャッシュがあるため、先読みのような形で命令を事前処理できることがあげられます。(先読みしてもヒットしない場合があるため) また、今のOSはマルチタスクなので、1つのプログラムが動作していても、他にも平行して動作することができますので、これが処理速度を落とす要因となります。 さらに、最近はCPUのコアやスレッドの複数化により、その数によって高速化が図られるようになりました。 長くなりましたが、本題に入れば、同じハードウェアにWinXP,Win7を入れて、同じプログラムを動作させ、100倍もの処理速度差が生じることは、常識的に考えられません。 具体的にどのような処理速度計測をしたのか、提示して頂けないでしょうか。 また、もしハードウェアが違うようでしたら、それも添えてお願いします。 また、早い方のWinXPでさえ、1秒間に100回は遅すぎます。 どんな、大変な処理をしていたのでしょうか? と言うよりも、whileやforの処理速度ではなく、whileやforの中で実行されている処理が問題だと思いますけどね。

judgementskill
質問者

お礼

回答ありがとうございます。 処理内容は System.Console.Beep(); です。

noname#194317
noname#194317
回答No.2

それはループの中にある処理によって違うとしか言いようがない気が。空ループだったらCPUと、プロセスごとの処理時間の割り振りで決まる話でしょうけど。ところで動かしている環境は、OS以外はコンパイラも含めて同じですよね?そこで何か違っていたら、単純比較はできなくなります。 せめてコードの抜粋を示すとか、どんな処理をしているのかを具体的に書くとかしないと、まっとうな回答は付かないと思いますよ。

judgementskill
質問者

お礼

回答ありがとうございます。 処理内容は System.Console.Beep(); です。

noname#146604
noname#146604
回答No.1

CPU

関連するQ&A

専門家に質問してみよう