1

WCFサービスの背後にC#クラスライブラリがあります。ライブラリには、静的として宣言されているClassAが含まれています。この静的クラスには、文字列を受け取り、LINQを使用してデータベースに文字列の変換を照会するメソッドMethodAがあります。この文字列は、Webサービスを介してクライアントに返送されます。

私の質問は、この状況で静的クラスと静的メソッドを使用することが悪い設計であるかどうかです。各クライアントがパフォーマンス、競合、またはその他の理由でクラスの独自のインスタンスを取得できるように、クラスとメソッドを非静的にする必要がありますか?ありがとう。

4

2 に答える 2

2

個人的には、静的メソッドやクラスに対して、一部の人よりも寛容なので、状況によって異なります。静的メソッドは再入可能でスレッドセーフですか?それなら大丈夫かもしれません。そうでなければ、おそらくひどくスケーリングするでしょう。

私が目にする問題の1つは、データコンテキストです。静的メソッドでは、データベース接続の存続期間をきめ細かく制御できない可能性がありますか?別の方法として、非静的クラスとメソッドを作成し、WCFサービスの静的コンストラクターで初期化することもできます。そうすれば、必要に応じて後で動作をより簡単に変更できます。

実際、WCFサービスの静的コンストラクターは、データベースが1秒間AWOLであるなど、失敗する可能性がある場合は問題があります。重要なのは、サービス自体をよりきめ細かく制御できるようになるということでした。

于 2010-05-03T18:46:09.393 に答える
1

私はソラリンがすでに答えたことに同意します。私は通常、静的クラス、特に静的クラスに害は見られません。静的フィールドやプロパティに触れることなく、何かを実行して結果を返す静的メソッドのみが含まれている場合。ただし、それらのいずれかに変更が加えられるとすぐに、問題が発生する可能性があります。(たとえば、ここSOでシングルトンと並行性に関する議論を検索してください。)

パフォーマンス面では、静的メソッドの呼び出しは、理論的には非静的メソッドの呼び出しよりもわずかに高速である必要があります(ただし、すべての実用的な目的で、これによって大きな違いが生じることはおそらくありません)。これは、ランタイムがthis/Meポインターを渡す必要がないためです。静的メソッドを使用すると、仮想メソッド呼び出しによるオーバーヘッドは確実に発生しません。

于 2010-05-03T18:51:35.607 に答える