2011-01-28 14 views
-7

私は「ストレステスト」を行っています。iPhone/iPadで再帰的な操作を行うのにどれくらいの時間がかかるかを知る必要があります。例えばこのObjective-C文字列の割り当てを高速化する方法はありますか?

//"key" is defined in header. 

for(int a=0;a<200;a++){ 
    for(int g=0;g<200;g++){ 

key = @"hi"; 

    } 
} 

は、この値の割り当て(40.000回)のiPadで6msのをとるようにしてください。しかし、それをすれば:

for(int a=0;a<200;a++){ 
    for(int g=0;g<200;g++){ 

key = [NSString stringWithFormat:@"%i,%i",a,g]; 

    } 
} 

それはほぼ1秒かかる!私のアプリケーションでは、この割り当てをもっと速く行う必要があります。誰かが別の方法を知っていますか?

+0

。私は200回ループを実行し、NSLoggingが何をするのか理解していません。ところで、「ほぼ1秒」とは何ですか? –

+9

最初のものがnone(@ "hi"は定数NSString)を作成している間に、コードの2番目のバージョンが40000のNSStringオブジェクトを作成していることは知っていますか?あなたは何を達成しようとしていますか? – diciu

+2

静的な値を代入して演算の結果を代入することはできません。確かに時間の差はあります。 –

答えて

2
for(int a=0;a<200;a++){ 
    for(int g=0;g<200;g++){ 
     char str[10]; 
     snprintf(str, 10, "%d,%d", a,g); 
     key = [NSString stringWithCString:str encoding:NSASCIIStringEncoding]; 
    } 
} 

ラン古い

時間2gの私の古いのiPod touch上の速4回:新しい4.303022833333
時間:あなたは自分のアプリを書いていないのはなぜ1.117406833333

+0

CFStringを使うともっと速くなるかもしれません。= less objc_msgSend –

+0

うわー! iPadの私の例は0,9秒かかる、あなたの例は0,3を取る!ありがとうございます;) – HispaJavi

+0

このルートに行くことでユニコードのサポートとローカリゼーションのサポートを失ったことにも注意してください。それはちょうどいいかもしれませんが...多分そうではありません。これは、snprintfから離れてフォーマット解析から遠ざかることによって、大幅に高速化できることにも注意してください。 – bbum

関連する問題