2016-04-10 10 views
0

私は、ファイルへの書き込みとコンソールへの印刷のスピードの違いと、SSDとHDDの違いがどのくらいあるかを確認するためにいくつかのテストを実行しました。私のプログラムは、ちょうど私も億まで、このテストを実行し、一貫回の同じ比率を見た数字0-10,000,000ループで計算を行うと、コンソールへの書き込みは遅くなりますが、ファイルへの書き込みは遅くなります。

Console: 6.089 file: 4.269

を印刷します。私もテストの順番を変えてみましたが、スピードの変化は見られませんでした。

ここで奇妙なところがあります。私は、コンソールの時間が大幅に増加したが、ファイルの時間がなかった

Console: 8.586 
file: 4.475 

を持ってこれをやった後.println(i*i+42/7*9-89*2%400/2);

に両方printlnsを変更しました。最後の奇妙なこととして、私はそれを.println((i*i+42/7*9-89*2) %400/2)に変更しました。この場合、コンソール出力での速度が実際にになりました。

Console: 4.352 
file: 4.66 

誰でもこの奇妙なことを説明できますか?私は劇的なスピードの変化の理由を見つけることができないようです。私はおそらくそれは書かれなければならないビットの数の変化だと思っていますが、なぜそれがコンソールのスピードにしか影響しないのか説明できません。

どのようなヘルプや回答もありがとうございます。この問題はしばらく私を気にしていたので、私は専門家に尋ねると思った!

+0

計算はIOに比べてほとんど何もありません。差異がある場合は、ウォームアップの問題または作成しているデータの可能性が高くなります。 –

+0

私はそれを考えましたが、私が言ったように、私はより大きなテストを実行し、コンソールで同じような時間の増加を見ました。そして、2回のテストの順番を変えて同じ時間を得ました。 –

答えて

1

ここでは、コンソールに印刷するのがファイル作成よりも遅い理由(why is system out println so slowから取得)について説明します。ので

printlnそれがホスティングするオペレーティング・システムが提供するコンソールと接続されている基礎となるPrintStreamだ、遅いではありませんが遅い:バイトは、コンソールアプリケーションに送信する必要が

  1. (非常にする必要がありますファーストタイプのフォントを使用してレンダリングする必要があります(アンチエイリアシングをオフにするとパフォーマンスが向上する可能性があります)。btw
  2. 表示する領域をスクロールして可視領域への新しい行(最良の場合:ビットブロックtra最悪の場合:完全なテキスト領域の再レンダリング)

計算が異なるために速度が急激に増加することは実際には説明できません。私は最初intからdoubleへのキャストを考えていましたが、それはprintlnの両方に当てはまるはずです。

結果はコンソールの幅より長く印刷されていますか?

+1

最初のprintlnは効果的に 'i * i'の周りにいくつかの数字を表示し、2番目は'(i * i + x)%200'を効果的に出力します。 0~10,000,000のiの場合は、単純に出力が少なくなります。 – makadev

+0

いいえ、すべての結果はほとんどコンソールの幅の4分の1を占めています。私はコンソールが遅い理由をいくつか考えましたが、説明に感謝します!かなり小さい計算のために、特にコンソールのために、このような劇的な時間差があるのはなぜなのでしょうか。 –

関連する問題