これは古いトピックであることは承知していますが、プログラミング中に常に次のような問題に遭遇します。メモリ使用量とコード サイズのバランスを取るにはどうすればよいですか?
次に例を示します。
クラスを (C# で) 実装したいのですが、コンストラクターがさまざまな種類のパラメーターのワイルド レンジを受け入れるようにしたいと考えています。したがって、IEnumerable オブジェクト (配列、リストなどを含む) を受け入れるコンストラクターが必要ですが、可変長パラメーター ( paramsを使用) を受け入れるコンストラクターも必要です。これら 2 つのコンストラクターの内部構築ルーチンはまったく同じですが、可変長パラメーターを使用できるようにするためには、後者が必要です。
Foo(IEnumerable<Bar> a) {/*construction*/}
Foo(params Bar[] a) {/*the same construction like above*/}
ただし、 paramsを使用してパラメーター配列の変換を行い、他のコンストラクターを呼び出すことができます。
Foo(params Bar[] a) : this(new List<Bar>(a)) {/*here empty*/}
この方法を使用している間、コード サイズは縮小されますが、一時リスト オブジェクトが導入されるため、(一時的ではありますが) メモリ使用量が増加します。
この例については、どちらがどの方法で優れているかについて、大きな議論があることを私は知っています。しかし、私は知りたいのですが、皆さんはこの種のバランスの問題全般にどのように対処しますか. 多くの場合、状況はより複雑になり、実行時間のバランスも考慮する必要がある場合があります。
「同じことを繰り返すな」という原則がありますが、これはここの例のような小さなコードにも当てはまりますか?