2012-04-19 8 views
1

パフォーマンスとベストプラクティスの点でどの方法が正しいか疑問に思っていました。もっと速い:配列をクラスに渡し、各ループに対してaを実行するか、クラスのループごとにaを実行する

URLの配列があります。これらのページのコンテンツをスクラップしています。スクラップを扱う別のクラスがあります。

現在、配列リストをクラスに渡すと、クラスは各配列の内容をスクレイピングする配列内容をループします。私はこれが最善の方法だと信じています。

私が考えていたもう一つの方法は、配列をループしていて、各URLをクラスに渡します。これは私にとっては遅くなると思われますが、わかりません。

2つの方法が両方とも実行可能な場合は、プロと詐欺は何ですか?

+3

マイクロと早すぎる最適化のようなサウンド - 読みやすいものを作成する...後でプログラムをプロファイリングし、この部分がボトルネックであることがわかったら、リファクタリングを検討したいかもしれませんが、それを変更する時間。 – amit

+1

これは、パフォーマンス面で何の意味もありません。ループ管理は、微視的には、あなたの手続きの中ではほんのわずかしかありません。 –

+1

amitが真実であると言います。文字列を解析したりネットワーク通信を行っている場合は、オブジェクトの作成に違いはありません。だから、いつも最高のメンテナンス性と最適化を目指してください。 – Thirler

答えて

5

私は、あなたが最も明快で簡単なものと信じていることをお勧めします。

アレイを通過するのはわずかに遅く、数ナノ秒を節約するかもしれませんが、実行している作業が数ナノ秒程度でなければ、その違いを知ることはほとんどありません。

+0

どうもありがとうございました。どちらの方法でもアプリに顕著な影響があるかどうかはわかりませんでした。答えをありがとう! – Peck3277

+0

それぞれのメソッド呼び出しは数nsを追加することができるので、数十億分の1秒と呼んでもそれは数秒です。 –

1

技術的には、クラスに各項目を渡すことにより(これは、あなたがやっていることであると仮定)ページあたりのメソッド呼び出しの追加オーバーヘッドに遅くなるだろう:

URLProcessor up = new URLProcessor(); 
for(String url: URLs) { 
    up.process(url); // method call for each URL 
} 

の代わり:

up.process(URLs); // a single method call 

しかし、この方法が何百万回も呼び出されない限り、これは実行速度に顕著な影響を与えません。プログラムよりはるかに重いタスクがこれよりも起こっています。

関連する問題