0

単一のC#クラスに多数の変数、プロパティ、および/またはメソッドを含めることによる具体的なパフォーマンスのペナルティはありますか?

合計で約1,200行のコードを持ついくつかのクラス(チェス盤、移動ジェネレーター、PGNパーサー)があります。ムーブジェネレーターとパーサーはどちらもボードクラスと非常に緊密に結合されており、3つのクラスすべてを1つの大きな「キッチンシンク」クラスに単純に結合したいという強い誘惑があります。

各クラスを1つのタスクに集中させ、内部設計をきれいにカプセル化するという概念を理解し、称賛しますが、.NETの使用は交渉の余地のない要件であるため、パフォーマンスの見返りに「設計の純度」を犠牲にすることもできます。

可読性/保守性の明らかな問題以外に、多数の小さな単純なクラスとは対照的に、少数の大きな複雑なクラスを持つことの欠点は何ですか?

乾杯!謙虚なプログラマー,,,^.. ^ ,,,

4

1 に答える 1

14

1 つの C# クラスに多数の変数、プロパティ、および/またはメソッドを含めると、具体的なパフォーマンスの低下はありますか?

より多くの変数を使用すると、インスタンスのメモリ使用量が増加し、構築時間が長くなる可能性があります。変数がすべての状況で必ずしも必要ではない場合、これはペナルティをもたらす可能性があります。

そうは言っても、主な欠点は、信頼性、保守性、テスト容易性の点です。

各クラスを単一のタスクに集中させ、内部設計を明確にカプセル化するという概念を理解し、称賛しますが、.NET を使用することは交渉の余地のない要件であるため、パフォーマンスと引き換えに「設計の純粋さ」を犠牲にすることも厭いません。

.NET はひどいコードを作成することとは何の関係もありません。同じプロジェクトで優れた設計と .NET を使用できます。実際、これは非常に簡単に実現できます。

いくつかのクラス (チェス盤、ムーブ ジェネレーター、PGN パーサー) があり、合計で約 1,200 行のコードがあります。ムーブ ジェネレーターとパーサーの両方がボード クラスに非常に密接に結合されているため、3 つのクラスすべてを 1 つの大きな「キッチン シンク」クラスに単純に結合したいという強い誘惑があります。

これをリファクタリングして、より小さなクラスに分離する動機を見つけようとすることを検討します。これは、パフォーマンスを含むあらゆる面で役立つ可能性があります (必要に応じて)。通常、パフォーマンスの問題を厳密に見つけて修正するよりも、クリーンでよく考えられた設計でパフォーマンスの問題を修正する方が簡単です。結合された大規模なコードベース。クラスが小さいほど、プロファイリングと測定が容易になり、実際のパフォーマンスの問題 (存在する場合) を発見して修正することが、大量の混乱したコードから作業する場合よりもはるかに簡単になります。

于 2012-05-22T19:19:53.883 に答える