-1

.NETでは、スケーラビリティに関して、静的クラスの静的メソッドと通常のクラスのインスタンスメソッドの間で考慮すべき問題がありますか?

クラス内の静的メソッドに対して多くの呼び出しが行われると、「ログジャム」が発生しますか?またはそれは問題ではありません。もしそうなら、インスタンスメソッドを使用する方が良いでしょうか?

顧客データを取得するために呼び出されるGetCustomers()のようなメソッドのようなもの。

編集:質問は、他の質問/回答で扱われている各タイプのメソッドへの呼び出しのパフォーマンスではなく、スケーラビリティについてです。静的メソッドとインスタンスメソッドに対して1秒あたり10Kの呼び出しがある場合、静的メソッドで問題が発生しますか?またはそれは問題ではありません。

4

3 に答える 3

2

いいえ; 本当の違いはありません。

メソッドはstatic、インスタンスに依存しない場合に使用する必要があります。

于 2012-04-24T00:35:48.283 に答える
1

メソッドが特定のオブジェクト インスタンスに依存している場合、静的メソッドとインスタンス メソッドの間にパフォーマンスの違いはありません。インスタンスが不要な場合は、静的メソッドの方が若干高速になる可能性があります。

これは、インスタンス メソッドが、インスタンス パラメータを受け取る静的メソッドとほぼ同じように内部的に扱われるためです。したがって、測定可能な差はないはずです。

インスタンスを必要としない静的メソッドは、ごくわずかではありますが、ほぼ確実に高速になります。同じパラメーターを持つインスタンス メソッドと静的メソッドが呼び出される場合、インスタンス メソッドには、スタックにプッシュされる追加の引数 (操作対象のインスタンス) が必要になります。

インスタンスに固有でないメソッドを静的にすることは一般的に良い考えですが、そうすることによる速度の利点は非常に小さいです。違いを知る必要がある場合は、プロファイルを作成できますが、信号対雑音比が小さいと推測され、有用なことは何も学べない可能性があります.

于 2012-04-24T00:39:17.827 に答える
1

それは本当に問題ではありません。重要なのは、メソッドがクラスの特定のインスタンスの状態にアクセスする必要があるかどうかです。そうでない場合は静的にすることができますが、そうでない場合はできません。理論的に厳密に質問している場合、メソッドがインスタンス状態データにアクセスする必要がないと仮定すると、ヒープ上に無駄なオブジェクトを作成する必要がないため、明らかに静的メソッドには小さな利点があります。それを使用するには...インスタンスメソッドにした場合、インスタンスを作成する必要があります(状態データ、どのインスタンス、またはインスタンスの状態が重要ではないため、インスタンスは1つだけです) - 何度呼び出してもインスタンスは 1 つだけ...

しかし、典型的なサイズのクラスの 1 つのインスタンスは、面倒なヒットではありません...このクラス (型) が 3 ギガバイトのヒープ領域を必要としないと仮定します!

于 2012-04-24T01:34:35.010 に答える