-1

適切な解決策が見つからないという簡単な質問:

プロセッサに少なくとも 10 秒間「噛み砕く」何かを与える単純なループは何ですか? 私はこのようなことを試しましたが、瞬く間に終了します:

int max = 300000;
for (int i = 0; i < max; i++)
{
    //do some random math here
}

より多くの時間を取り、プロセッサのパワーを少し使用するために、そこに入ることができる何らかの計算またはその他の操作はありますか? またはこれを達成する別の方法はありますか?

4

4 に答える 4

8

スレッドを一定期間ブロックしたいが、CPU サイクルを使い果たしたくない場合は、Thread.Sleep.

生産的なことをせずに一定期間 CPU サイクルを浪費したい場合は、 を使用できますThread.SpinWait

于 2013-02-27T21:29:20.140 に答える
2

あなたの条件に従って:

より多くの時間を取り、プロセッサのパワーを少し使用するために、そこに入ることができる何らかの計算またはその他の操作はありますか?

DateTime と while ループを使用できます。

var start = DateTime.Now();
var end = start.AddSeconds(10);
while (DateTime.Now() != end) {}
于 2013-02-27T21:29:26.670 に答える
1

素数の検索、バブル ソートなど、ループ内のループ内にループがある場合はいつでも作業できます。並べ替えるには大きな配列を用意するか、10 秒間にわたってやや大きな乱数を選択する必要がありますが、それらは私が想像する最高かつ最速の賭けです。

于 2013-02-27T21:29:12.393 に答える
1

時間ベースの物理方程式を使用してみてください。

例: 自由落下する物体が一定時間 (秒単位) に X 距離に到達するまでに移動した距離。

private float Gety(float t){float V=t*9.8f; return ((V*V)/19.6f);}

これは、リターンが選択した距離と等しいかそれ以上になったときに終了ポイントになるループで設定できます。

時間ステップを増減することにより、その距離以上に達するまで、より多くの計算を実行します。

Fe: 初期時間を 0.0f に設定し、目標距離を 500 に設定し、時間ステップを反復ごとに 0.01f から 0.001f に増やすと、ブレーク距離に達するまで、それに応じてより多くの計算が実行されます。

ループ内で 0.0000000000001f のステップでループすると、うまくいきます。

于 2013-02-27T22:30:45.813 に答える