2016-05-06 15 views
2

ので、同様に、私は、変数に代入せずにオブジェクトをインスタンス化するコードベースで働いている:これはであるが、コンストラクタ内オブジェクトを返すコンストラクタは無駄になることはありませんか?

new MyNonStaticClass(); 

が...とにかく

静的クラス/メソッドの呼び出しですこれはコンストラクタの唯一の用途であり、静的メソッドまたは静的クラスに変換できます。

これ

はスルーアウトコードベース散らばっているので、質問は:静的なクラスにこれらを変更することにパフォーマンス上の利点は、

ありますか?

私は時間があったらいいと思っていますが、ワークロードの優先順位をつける必要があります。

+1

個人的には可読性が重視されます:) –

+0

私も@JonSkeet、ワークロードがありますが、私は優先順位をつける必要があります:-) –

+1

なぜパフォーマンスがこれについてのあなたの懸念を導くように思われるのですか?割り当てなしでctorを呼び出すと、オブジェクトが作成され、次のGCに配置されます。これが副作用でない唯一の方法は、コンストラクタが静的な状態を変更する場合です。 – Matt

答えて

4

これらを静的クラスに変更するとパフォーマンスが向上しますか?

はい - GCが次に収集する必要のある無意味なオブジェクトの負荷を構築することはありません。あなたのアプリケーションでそれは重要ですか?伝えるのは難しい。

さらに重要なことは、有意義なの可読性のメリットがあることです。オブジェクトを構築することは、オブジェクト毎の状態が重要であることを意味する。 void staticメソッド呼び出しはにしか例外とグローバル状態の副作用がありますので、呼び出しの目的がはっきりしています。加えて、意味のある名前を付けることができます。

私はそれをリファクタリングして検索して置き換えるのはかなり簡単だと思います。 (私はこの種別やリファクタリングを行うためのツールは知らないが、それは存在するかもしれないが、存在する可能性があるが、検索と置換はおそらくそれらを見つけるよりも早いだろう)

+0

個人的に私は私の質問で言ったように、それをきれいにしたいと思います。私は読みやすさを好む。コンストラクタによって作成された未使用オブジェクトに何が起こるか尋ねることはできますか?あたかも割り当てられていないかのように範囲外に出るのか? –

+1

@SimonBosley:オブジェクトにはスコープがありません - 変数が行います。しかし、基本的には参照がないので、すぐにガベージコレクションの対象となります。私が私の答えで言ったように、私は実際にこれを修理する人にとっては非常に時間がかかるとは思っていません。 –

+0

私はプロジェクトに追加することができますが、大規模なソフトウェア開発チームの一員として優先順位を付ける必要があります。残念ながら、私が示した例だけではなく、この種のコードがたくさんあります。個人的に私はこのコードを書いていません;-) –

関連する問題