1

私は Android 開発者であり、Java は初めてではありませんが、パフォーマンスのベスト プラクティスについていくつか質問があります。あなたが決めることができるように、私のコードからいくつかの例を挙げます。

文字列連結

url = "http://www.myserver." + domain + "/rss.php?"
+ rawType + rawCathegory + rawSubCathegory + rawLocality
+ rawRadius + rawKeyword + rawPriceFrom + rawPriceto;

私の知る限り、これは url 変数が作成される前に 11 個の文字列オブジェクトを作成しますよね?

私は StringBuilder を使用するように教えられましたが、私の質問は、それを効率的にするために連結する文字列の最小量は何ですか? 2つの文字列を連結して使用するのはあまり意味がないと思いますよね?

ローカル変数

時々私はそのようにメソッド呼び出しを「連鎖」しようとします

FilterData.getInstance(context).getFilter(position).setActivated(isActivated);

単純に変数の割り当てを回避する必要がありますが、これよりも高速ですか?

FilterData filterData = FilterData.getInstance(context);
Filter filter = filterData.getFilter(position);
filter.setActivated(isActivated);

自分でローカル変数を保存する必要があると思いますが、メソッド名が長い場合などは読めなくなります。

ループ

http://developer.android.com/training/articles/perf-tips.htmlによると、強化された for ループは通常の for ループよりも 3 倍高速であり、それはそれで素晴らしく、とにかく書きやすいですが、索引?私の知る限り、強化された for ループでは、このように自分で追跡する必要があります

int index = 0;
for(Object obj : objects) {
    // do stuff
    index++;
}

これは通常のループよりも高速ですか?

for(int i = 0; i < objects.size(); i++) {
   // do stuff
}

拡張された for ループはおそらくその制限について最適化を行うと思うので、おそらく size() がこれに最適化された場合

int size = objects.size();
for(int i = 0; i < size; i++) {
   // do stuff
}

それはどのように立つでしょうか?

ありがとう、私はこれがつまらないものであり、それほど大きな違いをもたらさないことを知っていますが、むしろそのような一般的なタスクを正しい方法で学びます.

4

1 に答える 1

1

文字列:

ループが含まれていない限り、コンパイラは賢く、最適な方法で連結を行います。

ループするときは、StringBuilder または Buffer を使用します。

ローカル変数:

あなたが与える2つの例は同一です。名前を付けなくても、メモリを割り当てる必要があります。

ループ:

ループの種類によっては、強化されたループを使用すると大幅に改善されるか、ごくわずかな改善が得られる可能性があります。使用しているループをよく読んでください。

于 2013-02-26T16:34:57.377 に答える