3

関数から3つのオブジェクトを取得する必要があります。私の本能は、3つの参照を返す新しい型を作成することです。または、参照が同じタイプの場合は、配列を使用できます。ただし、pass-by-refの方が簡単です。


        private void Mutate_AddNode_GetGenes(ref NeuronGene newNeuronGene, ref ConnectionGene newConnectionGene1, ref ConnectionGene newConnectionGene2)
        {

        }

これには明らかに問題はありませんが、私はこのアプローチを使用することを躊躇します。主に、美学と心理的偏見の理由からだと思います。これらのアプローチの1つを他のアプローチよりも使用する正当な理由は実際にありますか?おそらく、追加のラッパーオブジェクトを作成したり、パラメーターをスタックにプッシュしたりする際のパフォーマンスの問題です。私の特定のケースでは、これはCPUを集中的に使用するコードであることに注意してください。CPUサイクルが重要です。

C#3アプローチのよりエレガントなC#2はありますか?

ありがとう。

4

3 に答える 3

3

ほとんどすべてのコンピューティングの問題について、CPUの違いに気付くことはありません。サンプルコードには「Gene」という単語が含まれているため、実際には、気付くようなまれなカテゴリのコードに分類される可能性があります。

他のオブジェクトをラップするためだけにオブジェクトを作成および破棄すると、パフォーマンスが少し低下します(結局、オブジェクトを作成してガベージコレクションする必要があります)。

美的には、無関係なオブジェクトをグループ化するためだけにオブジェクトを作成することはありませんが、論理的に一緒に属している場合は、包含オブジェクトを定義することはまったく問題ありません。

于 2009-08-11T22:04:32.083 に答える
1

ラッピングタイプ(非常にクリーンなIMHO)のパフォーマンスが心配な場合は、構造体を使用する必要があります。ref.NETの現在の32ビット実装(および今後の64ビット4.0)は、多くの場合、構造体のインライン化/最適化をサポートしているため、構造体と引数の間にパフォーマンスの違いはほとんど見られません。

于 2009-08-11T22:53:56.947 に答える
1

これら2つのオプションの相対的な実行速度について心配するのは、おそらく時期尚早の最適化です。最初にアルゴリズムを正しくし、クリーンで保守可能なコードを用意することに焦点を当てます。それが完了したら、プロファイラーを実行して、CPU時間の80%を占めるコードの20%を最適化できます。このメソッドが最終的にその20%になったとしても、2つの呼び出しスタイルの違いはおそらく登録するには小さすぎます。

したがって、パフォーマンスの問題はさておき、おそらくコンテナクラスを使用します。このメソッドはこれらの3つのパラメーターのみを受け取り、(おそらく)それぞれを変更するため、refパラメーターの代わりに3つのメンバー変数を使用して、コンテナークラスのメソッドとして使用するのが理にかなっているように思われます。

于 2009-08-12T00:30:58.643 に答える