2016-08-09 3 views
0

私は2つの機能、Foo()Bar()を持っています。Unity3dでO(1)関数をコルーチンにする価値はありますか?

Fooの時間計算量はθ(1)であり、Barはθ(n²)であり、それぞれ1つずつ実行され、BarはFooと依存関係がありません。

スピードアップするためにFooをコルーチンにする価値はありますか?

+6

O(1)はFoo()の速度について何も言わないが、速度は一定であるとしか言いません。すべての問題については、Foo()は10秒で完了し(常に)、Bar()はn = 1のとき1ms、n = 100のとき10秒かかるため、実行すると2倍のスピードアップを得ることができます並行して。 –

答えて

1

並列化する価値はありますか?場合によります。ここでのトレードオフは、コードの時間パフォーマンスと読みやすさ/保守性の間のトレードオフです。

私は、必要に応じて時間パフォーマンスの向上のみを実装します。最初に質問する必要があります、あなたやユーザーは、遅れや悪いパフォーマンスに気付いていますか?いいえの場合は、最適化の必要はありません。

第2ステップは、プロファイルして測定することです。コードのどの部分が重要であるかを知っておく必要があります。だから、Foo()とBar()の場合、平均と最悪の場合にどれくらい時間がかかるかを測定する必要があります。それであなたがどれくらいの時間を節約できるかを見てください。あなたはそれが価値があるかどうかを判断する必要があります。 ;)

コメントに記載されているように、ビッグO表記は一般的にあまり役に立たないでしょう。それを測る!

+0

ええ、私はここでは、大きなO表記を実行時間と関連づけるのは間違っています。私はコードをプロファイルし、パラレル化する価値があるかどうかを確認します。ありがとう! :) –

3

ユニティコルーチンはメインスレッドでも実行されます。続々。アセットストアから「スレッド忍者 - マルチスレッドコルーチン」のようなものを使用していない限り、コルーチンからは何も得られません。

+0

私はUnity3dについて何も知りません。OPの説明は、コルーチンが並行して実行されると仮定させました(そうでなければ、あなたが指摘しているようにスピードアップはありません)。 Unity3dコルーチンの素早い読んで答えを確認します。 –

関連する問題