1

オブジェクトの割り当て (またはその他のもの) をチェックする正しい方法は何だろうと思いました。私はいくつかのパフォーマンス テストを自分で行いましたが、メソッドを呼び出さずにチェックすると、「膨大な」時間を節約できることがわかりました。良いコーディングと見なされる方法はどれですか? 以下のテストと結果。

定義:

#define checkUM if (!um) {um =  [[UtilityMaster alloc]init]; }

対メソッド:

-(void) checkUtility {
    if (!um) {um =  [[UtilityMaster alloc]init]; }
}

チェック用のコード:

int imax = 1000000000;
int i = 0;
IFD100(@"check method")
while (i <= imax) {
    [self checkUtility];
    i++;
}
IFD100(@"check method end")
i = 0;
IFD100(@"check define")
while (i <= imax) {
    checkUM;
    i++;
}
IFD100(@"check define end")

チェック 1:

2013-06-25 18:36:16.712  check method
2013-06-25 18:36:27.669  check method end  <-- 10.957 secs
2013-06-25 18:36:27.670  check define
2013-06-25 18:36:30.128  check define end  <-- 2.458 secs

チェック 2:

2013-06-25 18:37:18.900  check method
2013-06-25 18:37:28.678  check method end  <-- 9.778 secs
2013-06-25 18:37:28.679  check define
2013-06-25 18:37:31.136  check define end  <-- 2.457 secs
4

3 に答える 3

5

呼び出しを十分に行っている場合は、パフォーマンスを考慮する価値があるかもしれませんが、10 億回呼び出していることに注意してください。これは、呼び出しごとに約 9 ナノ秒余分にかかることを意味します。それは膨大な時間ではありません。また、 #define はマクロであることを覚えておいてください。これは、基本的にコードを呼び出した場所にコピーペーストすることを意味します。好きなように解釈してください、それはあなたの選択ですが、メソッドを使用することをお勧めします。メソッドの方が単純で拡張が容易だからです。呼び出しごとに余分な 9 ナノ秒を必要とするものがある場合は、とにかくストレート c で記述する必要があります。

于 2013-06-25T17:23:32.077 に答える
3

これは、10 億回の反復で 9 秒の節約になります。

そのマクロを見ずに、それが何をするかを理解しようとすることで得られる時間の節約についてはどうですか。またcheckUtility、あまり明確なメソッド名ではありません。今は理にかなっていると思いますが、2 か月後に戻ってきたときに、自分が何をしていたのか疑問に思うでしょう。マクロも同様。いずれにせよ、コードを最適化して 9 秒節約できましたが、何をしているのかを理解するためにそれ以上の時間を無駄にすることになります。

機械ではなく人間のためにコードを書く

于 2013-06-25T18:32:46.800 に答える