2011-06-23 6 views
0

私はアプリケーションのペイントとフラッドフィルの実装に取り​​組んでいます。 Objective Cを使って実装しましたが、アップルのフレームワークは使用していません。基本的にアルゴリズムはCプレーンから移植されました。Objective Cの実装ははるかに低速ですか? (最適化)

現時点では、Floodfill4とScanline floodfillの2つの実装があります。 両方とも800x600の四角形を埋めるためにiPadで約5秒を費やします。ここ は私のアルゴリズムです:私はsighnificant性能向上を持つことになります https://github.com/OgreSwamp/ObjFloodFill/blob/master/src/FloodFill.m

は、あなたは純粋なCにポートにいくつかの時間を投資する価値があると思いますか? 他の方法でパフォーマンスを向上させる方法がありますか?

ありがとうございます!

+2

Objective-CはCの厳密なスーパーセットです。つまり、floodfillは既にCプログラムであるはずです。タイムクリティカルなコードでObjective-Cの機能を使用している場合、アルゴリズム自体やツールの選択肢に問題があります。ツール自体ではありません。言い換えると、時間が重要なルーチンがある場合は、Objective-Cプログラムでも "純粋なC"でコーディングする必要があります。 –

+1

ここで質問してもらえますか?http://codereview.stackexchange.com/ – vikingosegundo

+0

Cの実装はあまり役に立たなかった。それでも800x600の場合は約5秒です – OgreSwamp

答えて

1

Objective Cの主なパフォーマンスの問題は、メソッド呼び出しです。標準C呼び出しよりも遅いです。 しかし、サブルーチン呼び出しをあまり使わないと、パフォーマンスには影響しません。 しかし、800x600の5秒は現代のプロセッサでは非常に遅いため、コードを最適化する必要があります。

+0

ちょうどあなたのコードを見てみましょう。実際には各ピクセルごとにサブルーチンを頻繁に呼びますが、これは非常に遅いです。 –

+0

しかし、関数を呼び出すことなく色を比較する方法はどうでしょうか。 PS:Cで実装しても、かなりの時間が節約されませんでした。 – OgreSwamp

+0

RGBAバッファをcolor構造体のarray [] []に変換し、color.r、color.g、colorを比較する方が速いと思いますか? bは平等のために? – OgreSwamp

関連する問題