2012-04-24 15 views
-1

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

クラス内で静的メソッドが多数呼び出されると、「ログジャム」が発生しますか?それとも問題ではないですか?もしそうなら、インスタンスメソッドを使うほうがいいですか?

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

EDIT: 他の質問/回答ではなく、スケーラビリティについて言及されている、各タイプのメソッドへの呼び出しのパフォーマンスに関する質問はそれほど重要ではありません。静的メソッドと静的メソッドとの間に秒当たり10Kコールがある場合、静的メソッドに問題がありますか?それとも問題ではないのですか?

答えて

1

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

しかし、典型的なサイズのクラスの1つのインスタンスは致命的なヒットではありません...このクラス(タイプ)は3ギガバイトヒープスペース!

2

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

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

1

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

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

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

非インスタンス固有のメソッドを静的にすることは一般的には良い考えですが、速度の利点は非常に小さいです。違いを知る必要がある場合は、それをプロファイルすることができますが、信号対雑音比が小さくなると思っていますが、何も役立たないことがあります。

+0

マイナーな提案..あなたの最初の文は、書かれているように間違っています...私はそう思います メソッドが特定のオブジェクトインスタンスに依存する場合、静的メソッドとインスタンスメソッドの間には大きな違いがあります。 - 静的メソッドはコンパイルされません... –

関連する問題