1

アプリをARCに変換しようとしていますが、変換すると5倍遅くなります:(

私のグラフビューには、すべてのポイントを反復する次のコードブロックがあります。

            NSLog(@"%f", CACurrentMediaTime());
            for (NSUInteger xIndex = firstXValueOnScreen; xIndex <= lastXValueOnScreen; xIndex++)
            {
                float value = 5; //This used to call a function to get the value but I took out the function call to better demonstrate that this seems to be just a general slowdown...

                if (extremesUninitialized)
                {
                    yMax = value;
                    yMin = value;
                    extremesUninitialized = NO;
                }
                else
                {
                    yMax = MAX(yMax, v,alue);
                    yMin = MIN(yMin, value);
                }
            }
            NSLog(@"%f", CACurrentMediaTime());

ARCの前は、このブロックは約.01秒で実行されます。次に、ARCコンバーターを使用します。これにより、コードが文句なしにARCに変換されます。この後、同じ状況で同じコードを実行すると、.05秒の結果が得られます。5の倍数で遅くなります...そこで、スナップショットから古いプロジェクトを復元したので、ARCはなくなり、10回のようにテストを実行し、一貫して.01秒の結果が得られました。それから私はそれをARCに戻し、一貫して.05秒を得ました。XCodeは、なぜこれが起こっているのかについて、ここで私に手がかりを与えていません...しかし、私のコードの残りの部分も遅くなっています。何が起こっているのでしょうか?

4

2 に答える 2

7

問題のあるファイルを見たいと思います。いずれの場合も、いつでもすべてのARCをオンにすることができますが、問題のあるファイルについてはオフのままにしておきます(パフォーマンスの最適化後)。これが、Appleでたくさんのものを構築した方法です。

通常、プロジェクト全体でARCをオンにしてから、特定のファイルでオフにします。オフになっているファイルは次のようになります。

#if __has_feature(objc_arc)
#error This file should not be built with ARC until blah-blah-blah is fixed.
#endif
于 2012-08-09T22:09:45.270 に答える
2

オプションはほんの一握りです-それはこれらのうちの1つでなければなりません:

1)古いコードは-Osでオプティマイザーを使用し、新しいコードは「デバッグ」構成ではなく(「リリース」でテストする必要があります)使用しません。

2)(lastXValueOnScreen --firstXValueOnScreen)の値、つまり実行している範囲が異なります(理由がわからない場合は、検索を行う必要があります)

3)ARCを有効にしたときに異常に実行されているバックグラウンドタスク(スレッド)がありますが、通常はありません。

だからこれを見つける方法に関するいくつかのアイデア:

1)両方のScheme構成設定を再確認し、リリースを確認します(ARCがデバッグで遅くなるかどうかはわかりませんが、デバッグはリリースよりも確実に遅くなります)。

2)これらの2つの値を、forループの上のログステートメントに追加します。

3)他の作業を行う前に、このコードのチャンク全体をappDelegateLaunchedメソッドに移動するか、appDelegateの "+(void)initialize"メソッドに配置することをお勧めします(他のコードの前に実行されます)。2つの変数の大きな値をハードコーディングします。

私がARCで読んだすべてのドキュメントは、より高速であると言っています。すべてのAppleエンジニアは、より速いと言っています。私の経験はより速いです。

于 2012-08-09T21:32:46.153 に答える