5

私は現在、C#MVC REST Web APIを開発しており、設計の2つの可能性のいずれかを選択しようとしています。

設計に深く入り込むことなく、データアクセス用のクラスを作成する予定です。これをと呼びますDataSourceDataSource適切な応答を正しく構築するには、それぞれに含まれる小さなロジックブロックを実行する必要があります。将来的にコードをホットロードできるようにしたいので、単にこれらの関数をオンDataSourceにするのではなく、他のアセンブリによって提供されるようにします。これの概念実証が実装されており、これまでのところ、非常に優れています。

私が決定しようとしているのは、単一の静的ExecuteQuery関数を使用して静的クラスを作成するか、ファクトリメソッドを作成して、と呼ばれるインスタンスメソッドを持つこれらのクラスのインスタンスを作成することExecuteQueryです。

リクエストごとに複数の短命のオブジェクトを作成することと、静的メソッドを呼び出すこととの間のパフォーマンスに関する考慮事項は何ですか?

直感的には、静的メソッドの方が高速ですが、(ホットロードされたコード要件をサポートするために)リフレクションを介して静的メソッドを呼び出すのは少し頭痛の種になるとすでに予想しています。

短命のオブジェクトに大きなペナルティがない場合、単純さだけで勝つ可能性があります。

予想される負荷に関する関連情報:

  • 300ms〜800msの範囲の応答時間
  • 約2000のWebクライアントの平均負荷
  • 約4000クライアントのピーク負荷
  • 2〜5秒ごとにクエリを実行するクライアント
  • 毎秒1クエリのクライアントピークレート

また、それぞれDataSourceが最大8つ、平均3つのこれらのインスタンスを作成します。

4

4 に答える 4

1

呼び出しを実装クラスに委任する静的クラスを使用します。

これらの実装クラスは、リフレクションを必要とせずにメソッドを呼び出すことができる共通のインターフェースを実装する必要があります。そしてもちろん、静的メソッドはインターフェースメソッドを実装できません。インターフェイスの実装はインスタンスである必要があり、それらをインスタンス化するには何らかのファクトリが必要です。それらが外部アセンブリに存在する場合は、Managed Extensibility Framework(MEF)を確認することを強くお勧めします。http://msdn.microsoft.com/en-us/library/dd460648.aspxを参照してください

リクエストごとに複数の短命のオブジェクトを作成することと、静的メソッドを呼び出すこととの間のパフォーマンスに関する考慮事項は何ですか?これらのメソッドがデータアクセスを行うことを考えると、パフォーマンスへの影響は完全に完全に無視できます。

MEFを使用する場合、フレームワークはシングルトンのようなインスタンスを作成します。

自分の役割を果たし、これらのオブジェクトを複数回作成する必要をなくしたい場合は、それらにシングルトンパターンを実装できます。

于 2012-05-26T01:51:21.847 に答える
1

DataSource各インスタンスがデータベースへの新しい接続を作成すると想定しています。その場合は、インスタンスを 1 つだけにするのが理にかなっています。「大きなペナルティ」かどうかを確認する唯一の方法は、ソリューションとプロファイルの両方のモックアップを作成し、影響が大きいかどうかを確認することです。

  • 一度に多くのクライアントを持っているようには見えないので、これも Singleton パターンに当てはまります。
  • 多くの同時クエリはありません (主に上記のステートメントのため)。
  • 応答時間の仕様が定義されています。

Factory パターンについて私ができる唯一の議論は、「単純さ」です。プロジェクトが本当に時間に敏感な場合は、選択の余地がないと思います. しかし、本当にパフォーマンスが必要な場合は、Singleton を使用してください。

于 2012-05-26T01:40:06.440 に答える
1

MEF を使用します。独自のプラグイン フレームワークを発明する必要はありません。インターフェイスを介して公開されるインスタンス メソッドに誘導します。リクエストごとにオブジェクトを作成することは珍しくありません... MVC フレームワークはあらゆる場所でそれを行います。要求ごとのインスタンスは、データ アクセス シナリオに特に適しているため、明示的に作成するまで、あるユーザーのエクスペリエンスが他のユーザーに影響を与えないように、トランザクションやロールバックなどをサポートできます。パフォーマンスに問題がある場合は、必要に応じて応答キャッシュを使用してください。

于 2012-05-26T01:40:17.347 に答える
0

主な決定事項は、「このオブジェクトには状態があるか?」です。

「いいえ」の場合は、必ず静的メソッドにしてください。

私見..PSM

于 2012-05-26T01:35:34.293 に答える