2

シングルトンまたは静的クラスであってはならないと私が信じているクラスがあります。消費者が共有できる状態ではありますが、状態があります。共有状態があるときはシングルトンを避けたいと思っていますが、私が聞いている議論は、オブジェクトのインスタンスが常に1つだけ存在することでパフォーマンスが向上するというものです。

私の特定のケースでは、このオブジェクトに関連付けられたデータはそれほど多くありません。それぞれに (最大で) 150 のエントリを持つ 2 つの辞書と辞書です。

あるとすれば、どの時点で、パフォーマンスの議論が何らかのメリットを保持するのでしょうか?

参考までに - 私は .NET を使用しています。

ありがとう!

4

7 に答える 7

5

いいえ。パフォーマンスの議論には何のメリットもありません。

パフォーマンスの問題があると想定する前に、パフォーマンスの問題をベンチマークして確認/特定する必要があります。10 分の 9 の確率で、あなたが思っていた場所にはなりません。

シングルトンが必要な場合は、単純に必要です。

于 2009-03-16T14:12:16.560 に答える
2

シングルトン パターンは主に、クラスの 1 つのインスタンスのみが必要であることを指定できるようにするために存在します。静的クラスは、通常、ステートレスな動作を提供するために使用されます。あなたが説明していることは、実際にはどちらのカテゴリーにも当てはまらないようです。コードのパフォーマンスを向上させるために、シングルトン パターンではなくキャッシングを使用することを検討します。もちろん、キャッシュは singletonの場合もありますが、キャッシュの場合は意味があります。

もちろん、オブジェクトがキャッシュである場合、私は自分自身を輪に巻き込んだだけです。

于 2009-03-16T14:12:43.797 に答える
2

パフォーマンス上の理由から、Singleton (または Static クラス) の作成について考えるべきではありません。

それを Singleton by designにする必要があるか、しないかのどちらかです。クラスの複数のインスタンスが存在し、互いに異なる場合は、シングルトンを使用できません。

于 2009-03-16T14:13:12.767 に答える
1

シングルトンは、開発者を人為的に 1 つのインスタンスに制限するのではなく、概念的にオブジェクトのインスタンスを 1 つしか存在できない場合にのみ使用する必要があります。2 つのインスタンスが存在する可能性がある場合、それはシングルトンであってはなりません。

前者が該当し、オブジェクトに状態が関連付けられている場合、初期化に関連するかなりのコストがあり、クラスが使用されない可能性がある場合、または初期化を延期する理由がある場合は、Singleton が役立ちます。その場合、Singleton が適しています。代わりに静的クラスを使用します。上記が当てはまらない場合は常にそれを使用する必要があります。

于 2009-03-16T21:29:10.147 に答える
1

シングルトン パターンを使用することに賛成でも反対でも、パフォーマンスが非常に強力な議論になるとは思いません。これは設計上の問題です。シングルトンを使用することが理にかなっているのかどうかは、次のとおりです。

オブジェクトのインスタンスが 1 つだけ必要な場合は、シングルトンを使用します。

複数のインスタンスが必要な場合は、必要ありません。

于 2009-03-16T14:10:39.607 に答える
0

通常、シングルトンは何よりもパフォーマンスを阻害します。これは、マルチスレッド アプリケーションでクラスをロックおよび同期でラップする必要があることを意味します。シングルトンまたはグローバルが使用されていなければ、これを回避できた可能性があります。

したがって、シングルトンの方が遅いかもしれませんが、より高速になる状況は考えられません。

アプリケーションでオブジェクトの 1 つのインスタンスを共有する場合は、そのオブジェクトへの参照を渡します。また、キャッシングや同時実行の理由から、複数の個別のインスタンスを使用する方が実際には高速であることが判明した場合に、後で設計を柔軟に変更することもできます。

パフォーマンスについて覚えておくべき最も重要なことは、予測が難しいということです。ボトルネックが何であると推測しても、ほぼ間違いなく間違っています。したがって、優れたパフォーマンスを確保する最善の方法は、プログラムを簡単に変更できるようにすることです。シングルトンはそこであなたに反対します。一度シングルトンを作成すると、それを削除することはほとんど不可能です。グローバル シングルトンの代わりにローカル変数を使用するとキャッシュの使用が改善されたとしても、複数のインスタンスのパフォーマンスが向上したとしても、クラスの 1 つのユニバーサル インスタンスに固執します。

于 2009-03-16T14:39:00.897 に答える
0

構築に多額のコストがかかる場合は、共通のインスタンスを返す抽象ファクトリパターンの方が適している可能性があります。シングルトンは、特に TDD クラウドでは評判が悪いですが、事実上、AF とシングルトンは同じことを行うことができます (AF はより多くのことを行うことができますが、それは別の話です)。

コストはそれほど高くないので、おそらく問題にはなりません。

于 2009-03-16T14:15:01.983 に答える