2011-12-16 8 views
1

反復回数が多いForループのスピードアップ?私は私のオープンGL ESアプリでループするためのシンプルな、次のしているのObjective C

for (NSValue * value in pointerStorageArray) 
{ 
    NSLog(@"Freeing Malloced Data"); 

    free(value); 
} 

は問題がpointerStorageArrayは約40000データ項目(3Dオブジェクトのすべてのデータを)含まれているため、ループがかかることです完了まで約1分。

ループの完了にかかる時間を短縮する方法はありますか?

EDIT

この問題は、現在の行の18時間コーディングしないことの重要性を示す図です。 )

+1

私は 'NSLog'機能なしで* much *速く行くと思っています。あなたはそのメッセージなしでそれを試すことができますか? –

+0

ああ良い神 - 私はばかです。ありがとうございました !!!!!!!!!! – GuybrushThreepwood

+0

5秒後に実行されます:) – GuybrushThreepwood

答えて

2

実際にスローダウンがfree()への呼び出しによって引き起こされた場合、40000個の個別ブロックではなく、いくつかの大きな連続ブロックを割り当てることを検討することができます(NSLogステートメントの削除は5分から4秒に短縮されます)。

いつものように、ボトルネックがどこにあるかを正確に判断するためにコードをプロファイリングする方法を見つける必要があります。

+0

ボトルネックになっているのは無料の呼び出しです。私のC知識はあまり良くありません。問題は、mallocステートメントがforループから呼び出されていて、あなたが言うように、40 000個の個々のメモリブロックを割り当てることです。それらをマージする方法について正しい方向で私を指摘できますか? – GuybrushThreepwood

+1

理想的には、別々のプールからすべてを割り当ててからプールを投げるだけです。私はiOSでそれをやったことは一度もありませんでしたので、どうやってやるのか正確にはわかりません。 –

関連する問題