• ベストアンサー

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

プログラムの繰り返し文(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% (4846/10257)
回答No.5

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

judgementskill
質問者

お礼

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

  • bardfish
  • ベストアンサー率28% (5029/17765)
回答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

  • 流れ図からプログラムに直してください!【C言語】

    その流れ図をC言語のプログラムに直してくれませんか? 処理2はscanf(..);って感じの内容です。 入口 処理1 for(処理2; 判断; 処理4){ 処理3 } 出口 って感じかなって思ったんですが、for文の中にscanfの文を入れてもいいのかわからずに悩んでます。 ループ文なのでwhile文、for文、do..while文のどれかかな?って思ったんですが違う気もして、わかるかたいらっしゃいませんか?

  • スーパーコンピュータの処理速度、能力とは、具体的には何をしているのですか。

     新聞記事では、スパコンの性能を1秒間の処理速度11.41GFlopsで、これが1秒間に10億回浮動少数点演算ができることだという範囲の説明に止まっています。    具体的には1秒間でどのような処理ができているのでしょうか。例えば、地球と宇宙の果てまでの距離が計算できる能力だとか、庶民の生活レベルで教えて下さい。  また、そのような処理を可能にしている実体はどんなものですか。やはりプログラムなのですか。浮動小数点演算とは、プログラム自体の長短にかかわらず単位時間で処理できるということですか。

  • 処理速度が遅くなってしまった

    パソコンがフリーズしてしまいFinderも動かなくなったので 電源を落として無理矢理(電源ボタンを5秒間押して)終了させたのですが それ以降、処理速度がいっきに低くなってしまいました。 インターネットを立ち上げるのにも、ファイルを開くにも、何をするにしても 以前と比べると処理速度が遅くなっています。 時刻も止まったままで、直そうとすると読み込みマークが出たまま反応しません。 スリープ機能も3回に一回程度しか反応してくれません。 どうすれば以前のように直すことができるのでしょうか・・? OSはMacOSX、バージョンは10.3.9でメモリは1GBです。 よろしくお願い致します。

    • ベストアンサー
    • Mac
  • 処理速度が遅くなりました

    初心者なので、簡単な方法を教えてください。 Win98SE pentium(3)のPCです。 いらないプログラムなどをゴミ箱に、そして空にしていますが、処理速度がとても遅くなりました。 ハードの容量は見る場所がわかりません。 お願いします

  • 書き出し処理速度について

    バイナリデータを読み込み、数値データに変換、テキストファイルにタブ区切りで書き出すプログラムをvba/excelにて作成中ですが、書き出し処理速度の遅さに困惑しております。数値データに変換した配列はDATA(256,120000)としており、書き出しデータ数は約3,000,000個あります。その書き出しプログラムを下記のように記述したのですが、とんでもなく処理速度がおそいのです。   Open "c:\test.txt" For Output As #2 For i = 1 To 120000 For j = 1 To 256 Print #2, DATA(j, i); Chr(9);     Next j  Print #2, Chr(10); Next i Close #2 対処方法をご存知でしたら、ご教授願います。

  • 処理速度

    プログラムの処理の速度について聞かせてください。 /*SpeedTest*/ import java.io.*; public class SpeedTest{ public static String St(){ String fname = "hello.txt"; try{ BufferedReader br = new BufferedReader(new FileReader(fname)); String str = br.readLine(); }catch (Exception e){ e.printStackTrace(); } return ""; } public static void main(String[] args){ long s = System.currentTimeMillis(); for(int t = 0; t < 50; t++){ SpeedTest.St(); } long g = System.currentTimeMillis(); System.out.println(( g - s ) + " ms." ); } } のプログラムを、コマンドプロンプトで実行すると、「900 ms」なのに対して、JBuilderでは、「100 ms」です。 もちろん、同じマシン上で、J2SDKも同じ、1.4.0です。 なぜ、これほどに処理が違ってくるのでしょうか・・? 環境は、win2kです。 JVM関係なのでしょうか?

    • ベストアンサー
    • Java
  • PCの処理速度について

    PCの処理速度について windows7がスペックの低いPC(XP)よりもプログラムのインストールなど時間がかかります セキュリティーは共にMicrosoft Security Essentialsです ネットブック win7 Home Premium(dynabook) セレロン メモリ2G winXP Home(NEC) アトム メモリ1G 画像処理は7のほうが早いですが、同じソフトをインストールするときはXPが早いです 共にハードはほとんど使用していません 新しいPCが前の物より遅いのがショックなのですが仕方ないことですか?

  • 時間内処理のCプログラム

    今、LSIC86試食版でプログラムの練習をしています。 時間内処理についてですが、例えば、5秒間HELLOという文字を出力して、5秒後ENDを表示する といったプログラムの作り方をご存知の方いらっしゃらないでしょうか? 5回表示すると言うプログラムでしたらできますが、時間内処理の組み方がわからなくて困っています。 LSIC86番のコンパイラで実行したいので、教えてください。 よろしくお願いします。

  • 並列化での処理速度について

    実験でプログラムを並列化してその時の処理速度を測定しました。 その際に並列化をしなかった場合も測定したのですが… 1スレッドでの処理速度と並列化無しでの処理速度で並列化無しの方が早く処理は終わりました。 2スレッド以降は並列化した方が早くなったのですが… これは何かきちんとした理由があるのでしょうか? 少し自分で調べてみた結果オーバーヘッド?だかが関係しているようにも思えたのですが… 詳しい方回答よろしくお願いします!!

  • for loop の処理が途中でプログラムを終えてもつづいてしまうのをやめさせるには?

    お世話になります。 for a = 1 to 10000 ~~処理~~ now = Timy While Timy < now + 2 DoEvents Wend loop ~~ とコーディングしてるのですが 途中でプログラムを終わらしても コンピューターの方でプログラムが続いてるみたいなのですが終わらすにはどうすればよいでしょうか?